化学很神奇,以下是烷烃基。
假设如上图,这个烷烃基有6个原子和5个化学键,6个原子分别标号1~6,然后用一对数字 a,b 表示原子a和原子b间有一个化学键。这样通过5行a,b可以描述一个烷烃基
你的任务是甄别烷烃基的类别。
Example
Input
2
1 2
2 3
3 4
4 5
5 6
1 4
2 3
3 4
4 5
5 6
Output
n-hexane
3-methylpentane
解析:首先我提供一个思路,仔细观察烷烃的图片,每个烃基的编号是混乱的,即是可以自由编号,但是a<b的,所以不要纠结于数字规律,而是观察图片,找点与点之间的规律
例如第一个烷烃,你会发现除了第一个点和最后一个点,其余点每个点连接2条键,所以找到最大键值为2的,就一定是第一个烷烃。同理,观察第二个,第三个······
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int a,b,t,edgenum,index1,index2;int judge[7];
for(int e=0;e<7;e++){
judge[e]=0;
}
cin>>t;//烷烃的个数
for(int k=0;k<t;k++){
int tag[7][7]={0};
for(int h=0;h<5;h++){//5条边
cin>>a>>b;
tag[a][b]=1;tag[b][a]=1;
}
for(int i=1;i<=6;i++){//6个点
edgenum=0;
for(int j=1;j<=6;j++)
if(tag[i][j]==1 && i!=j)
edgenum++;
judge[i]=edgenum;
}
index1=0;index2=0;
for(int mi=1;mi<=6;mi++){
if(judge[mi]==3 ){
for(int mj=1;mj<=6;mj++){
if(tag[mi][mj]==1 && judge[mj]==1) index1++;
if(tag[mi][mj]==1 && judge[mj]==2) index2++;
}
}
}
if(index1==1 && index2==2) cout<<"3-methylpentane"<<endl;
if(index1==2 && index2==1) cout<<"2-methylpentane"<<endl;
sort(judge+1,judge+7,greater<int>());
if(judge[1]==2) cout<<"n-hexane"<<endl;
if(judge[1]==4) cout<<"2,2-dimethylbutane"<<endl;
if(judge[1]==3 && judge[2]==3) cout<<"2,3-dimethylbutane"<<endl;
}
return 0;
}
来源:CSDN
作者:py+c+SQL+…快乐学计算机
链接:https://blog.csdn.net/qq_43738932/article/details/104555621