程序设计第一次训练题 A-化学同分异构体的判断

本文介绍了一种通过分析化学键图来判断分子结构的算法。该算法基于每个原子的化学键数量特征,能够准确区分不同的分子结构,如2,2-二甲基丁烷、2,3-二甲基丁烷等。特别地,文章详细解释了如何处理3-甲基戊烷和2-甲基戊烷这两种结构相似但化学性质不同的分子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:
对于给出的五个数字序列,通过算法来判断该六个数字连起来的分别是对应的哪条链(注意数字的顺序并不对结果产生影响,只是判断所成的形状)。


思路:
首先看到这个题,因为是训练题的原因,想着针对这个题的特征来解题,即从每个原子的所有的化学键多少来判断,很容易看到同分异构的原子的化学键的数量并不同,通过每个原子的这个特征判断出。但在其中有3-和2-的特征是一样的,因此对其判断不出来,再对这两个进行特征的判断。可发现3-的原子所连接的三个原子的化学键的数量分别是2,2,1;2-的特征是1,1,2。可通过用矩阵存图,然后在图中找到所邻接的原子的化学键的个数来判断出这两个。


总结:
第一次遇到这个题目,刚看到的时候还是有点慌的,自己写的这个代码感觉也是乱乱的,完全是对着题目来解的。就主要是提取出每个图中的特征,再判断就好了。

代码:

#include <iostream>
#include <queue>
#include <stack>
#include <algorithm>

using namespace std;

int main(){
	ios::sync_with_stdio(false);
	int n;
	cin>>n;
	int a, b;
	for(int i=0; i<n; i++){  
		int M[7][7]={0};   //记录图的矩阵
		int count1[7]={0};  //记录每个原子的化学键的多少
		int count2[7]={0};
		for(int j=0; j<5; j++){  //读取,记录化学键的数量
			cin>>a>>b;
			M[a][b]=1;
			M[b][a]=1;
			count1[a]++;
			count1[b]++;
			count2[a]++;
			count2[b]++;			
		}
		
		sort(count1,count1+7);  //对化学键的数量进行排序
		if(count1[6]==4){    
			cout<<"2,2-dimethylbutane"<<endl;
		}else if(count1[6]==3 && count1[5]==3){
			cout<<"2,3-dimethylbutane"<<endl;
		}else if(count1[6]==2){
			cout<<"n-hexane"<<endl;
		}else{     //通过对这两个原子邻接的原子的化学键数进行判断
			int i=1;
			for(; i<=6;i++){
				if(count2[i]==3) 
				break;
			}
			int ret=0;
			for(int k=1;k<=6;k++){
				if(M[i][k]==1){
					if(count2[k]==2)
					ret++;
				}
			}
			if(ret==1){
				cout<<"2-methylpentane"<<endl;
			}else{
				cout<<"3-methylpentane"<<endl;
			}
		}
		
	}

	
	
	return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值