实验week2 A-化学

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

原子没有编号方法,比如12 23 34 45 56和13 23 24 45 56是同一种,本质上就是一条链,编号其实是没有关系的,可以在纸上画画就懂了。
可以运用暴力解法,题目只需要我们鉴别这五种烷烃基,故找出这五种烃基的区别即可,即对于每一种烷烃基,找出能唯一区分它的特征。

解题思路;
我的区分方法是“原子邻居法”,即找出六个原子中最受欢迎的原子(即与之相连的原子最多),称之为原子C位(原子C位可能不止一个),原子C位的邻居数为C邻居数,此外,端原子(只有一个邻居)也是一种辅助区分方法,仔细观察这五种烷烃基,可以发现:
n-hexane的C邻居数为2,
2,2-dimethylbutane的C邻居数为4
其余三种的C邻居数为3
如何区分这三种呢,
2,3-dimethylbutane有两个原子C位
3-methylpentane的原子C位有1个端原子邻居
2-methylpentane的原子C位有2个端原子邻居

至此,五种烷烃基能够完全区分。
(区分方法还有很多,思考还能得出很多种原子邻居区分法)

实验代码:


```cpp
#include<iostream>
using namespace std;
int main(void)
{
 int n,a,b;
 cin>>n;//总共输入n组数据 
 for(int i=0;i<n;i++)
 {
  bool arr_[7][7]={0};  //数组表示两两原子间是否相连
  int arr[7]={0};  //记录每个原子与多少个原子相连 
  for(int i=0;i<5;i++)
  {
   cin>>a>>b; 
   arr_[a][b]=1;
   arr_[b][a]=1;
   arr[a]++;
   arr[b]++;
  }
  //找出max
  int max=0;  //记录C邻居数
  int maxnum=1; //记录原子C位个数
  int maxi=0;	//记录原子C位序号
  for(int i=0;i<=6;i++)
  {
   if(arr[i]>max)
   {
    max=arr[i];
    maxnum=1;
    maxi=i;
   } 
   else if(arr[i]==max)
    maxnum++;
  }
  //判断
  if(max==2)
   cout<<"n-hexane"<<endl;
  else if(max==4)
   cout<<"2,2-dimethylbutane"<<endl;
  else   //max==3
  {
   if(maxnum==2)
    cout<<"2,3-dimethylbutane"<<endl;
   else 
   {
    int a1=0;   //记录端原子个数 
    for(int j=1;j<=6;j++)
     if(arr_[maxi][j]==1&&arr[j]==1)
      a1++;
    if(a1==1)
     cout<<"3-methylpentane"<<endl;
    else
     cout<<"2-methylpentane"<<endl;   
   }
  }
 }
 return 0;
} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值