A - 化学 (编译器选 GNU G++)

A - 化学 (编译器选 GNU G++)

  • 化学很神奇,以下是烷烃基。
    在这里插入图片描述
    假设如上图,这个烷烃基有6个原子和5个化学键,6个原子分别标号1~6,然后用一对数字 a,b 表示原子a和原子b间有一个化学键。这样通过5行a,b可以描述一个烷烃基

你的任务是甄别烷烃基的类别

原子没有编号方法,比如
1 2
2 3
3 4
4 5
5 6

1 3
2 3
2 4
4 5
5 6
是同一种,本质上就是一条链,编号其实是没有关系的,可以在纸上画画就懂了

  • 解题思路:初始化一个二维数组,原子由编号构成,将中间有化学键的两个原子对应的坐标值置1。例如编号为5.6的原子间存在化学键,则将二维数组中(5,6)和(6,5)的值改为1。将每个原子所连的化学键的数目统计下来进行排序,与图中烷烃基进行比较。2和3是同分异构体,可以在二维数组中找到所连化学键为1的原子,再统计其所连原子的化学键数目。会发现2的结构为两个所连化学键为1的原子连接着一个所连化学键为3的原子,而3的结构为2个所连化学键为1的原子连接着两个化学键为2的原子,以此来区分2和3。

  • 代码实现

#include <iostream>
#include <algorithm>

using namespace std;
      
int main()
{
	int n;
	int a,b;
	cin>>n; 
	for(int m=0;m<n;m++)
	{
		int s[6][6];
		for(int i=0;i<6;i++)//初始化 
		{
			for(int j=0;j<6;j++)
			{
				s[i][j]=0;
			}
		} 

		for(int j=0;j<5;j++)//输入 
		{
			cin>>a>>b;
			s[a-1][b-1]=1;
			s[b-1][a-1]=1;
		}
	
		int x[6];
		for(int i=0;i<6;i++)
		{
			x[i]=0;
		}
		for(int i=0;i<6;i++) 
		{
			for(int j=0;j<6;j++)
			{
				if(s[i][j]==1)
				x[i]++;
			}
		}
		
		sort(x,x+6);//排序 
		/*for(int i=0;i<6;i++)
		{
			cout<<x[i]<<" ";
		}*/
		
		int aa[6]={1,1,2,2,2,2};
		bool equal1=true;
		for (int i=0;i<6;i++)
		{
    		if (x[i] != aa[i])
    		{
    			equal1=false;
				break;
			}
		}
		if(equal1)
		{
			cout<<"n-hexane"<<endl;
			continue;
		}
	
		int bb[6]={1,1,1,2,2,3};
		bool equal2=true;
		for (int i=0;i<6;i++)
		{
    		if (x[i] != bb[i])
    			{
    				equal2=false;
					break;
				}
		}
		int z;
		if(equal2)
		{
			int count2=0;
			for(int i=0;i<6;i++) 
			{	
				int count=0,count1=0;
				for(int j=0;j<6;j++)
				{
					if(s[i][j]==1)
					{
						count++;
						z=j;
					} 
				//	cout<<z<<"zzzzz"<<count<<endl;
				}
				if (count==1)
				{
					for(int j=0;j<6;j++)
					{
						if(s[z][j]==1) count1++;
					}
				//	cout<<count1<<"11111";
				}
				if(count1==2)
				{
					count2++;
				//	cout<<count2<<"22222"<<endl;
					continue;
				}
			} 
			
			if(count2==2)
			{
				cout<<"3-methylpentane"<<endl;
				continue;
			}
				
			
			if(count2==1)
			{
				cout<<"2-methylpentane"<<endl;
				continue;
			}
				
		}
		
		int dd[6]={1,1,1,1,3,3};
		bool equal4=true;
		for (int i=0;i<6;i++)
		{
    		if (x[i] != dd[i])
    			{
    				equal4=false;
					break;
				}
		}
		if(equal4)
		{
			cout<<"2,3-dimethylbutane"<<endl;
			continue;
		}
		
		int ee[6]={1,1,1,1,2,4};
		bool equal5=true;
		for (int i=0;i<6;i++)
		{
    		if (x[i] != ee[i])
    			{
    				equal5=false;
					break;
				}
		}
		if(equal5)
		{
			cout<<"2,2-dimethylbutane"<<endl;
			continue;
		}
	}
}
发布了19 篇原创文章 · 获赞 0 · 访问量 662

猜你喜欢

转载自blog.csdn.net/Hdjjdsbjj/article/details/104600897