C++实现化学烷烃类别判断

和自甴很熟 提交于 2020-02-28 18:10:59

化学很神奇,以下是烷烃基。
在这里插入图片描述
假设如上图,这个烷烃基有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;
} 
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!