本文主要是介绍Week 2 化学(同分异构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 题目描述
- 样例
- 思路
- 总结
- 代码
题目描述
6个原子、5个化学键的烷烃一共有5中同分异构体,通过判断输入的每两个相邻的原子,输出该烷烃对应的同分异构体的名称。
样例
样例输入
2
1 2
2 3
3 4
4 5
5 6
1 4
2 3
3 4
4 5
5 6
样例输出
n-hexane
3-methylpentane
思路
判断同分异构体的名称主要通过有n(n=1,2,3,4)个键的原子个数:
n-hexane有4个2键的原子和2个1键的原子;
2,2-dimethylbutane有1个4键的原子;
2,3-dimethylbutane有2个3键原子和4个1键原子;
3-methylpentane和2-methylpentane都有1个3键的原子、2个2键的原子以及3个1键的原子;
此时需要对这两种同分异构体进一步判断:判断与3键相连的原子是2个2键原子还是2个1键原子。
其中index[]记录每个序号的原子的键数;index1[]记录键数为1、2、3、4的原子个数。
总结
在区分3-methylpentane和2-methylpentane两种同分异构体时,也可以判断两个2键的原子是否相连(总的来说就是拿到题感觉有点骇人,画一画就发现没那么复杂
代码
#include <iostream>
using namespace std;int main()
{int t;cin>>t;for(int i=0;i<t;i++){int index[7]; //记录每个原子连接的原子数 for(int j=0;j<7;j++){index[j]=0;} int a[7],b[7];//记录输入的数for(int j=1;j<=5;j++){cin>>a[j]>>b[j];index[a[j]]++;index[b[j]]++;}int index1[5];//记录连接数为1、2、3、4的原子的个数 for(int p=0;p<5;p++){index1[p]=0;}for(int k=1;k<=6;k++){if(index[k]==1){index1[1]++;}if(index[k]==2){index1[2]++;}if(index[k]==3){index1[3]++;}if(index[k]==4){index1[4]++;} }if(index1[4]==1){cout<<"2,2-dimethylbutane"<<endl;}else if(index1[2]==4&&index1[1]==2){cout<<"n-hexane"<<endl;}else if(index1[3]==2&&index1[1]==4){cout<<"2,3-dimethylbutane"<<endl;}else if(index1[3]==1&&index1[2]==2&&index1[1]==3){int flag=0;for(int p=1;p<=5;p++)//判断3连接的原子连接的是两个2连接的原子还是两个1连接的原子 {if(index[a[p]]==3){if(index[b[p]]==2)flag++;}if(index[b[p]]==3){if(index[a[p]]==2)flag++;}}if(flag==1)cout<<"2-methylpentane"<<endl;if(flag==2)cout<<"3-methylpentane"<<endl;}}
}
这篇关于Week 2 化学(同分异构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!