【A-化学】甄别六碳烷烃基类别

Shaine ·
更新时间:2024-11-10
· 725 次阅读

题意:在这里插入图片描述

如上图,这个烷烃基有6个原子和5个化学键,6个原子分别标号1~6(原子没有固定编号方法)。用一对数字 a,b 表示原子a和原子b间有一个化学键。通过5行a,b可以描述一个烷烃基,甄别烷烃基的类别。

样例输入:
在这里插入图片描述
样例输出:
在这里插入图片描述

思路:

甄别不同烷烃基的关键在于找到五种烷烃基的区别。用一个方形矩阵表示两个碳之间是否有化学键,然后统计不同度数碳的个数。

“2,2-dimethylbutane”有1个4度碳,“2,3-dimethylbutane”有2个3度碳和4个1度碳,“n-hexane”有2个1度碳和4个2度碳。其余两种,若3度碳与其余两个2度碳相邻,则是“3-methylpentane”,否则就是“2-methylpentane”。

总结:

把碳抽象成点,把化学键抽象成连线,用二维数组存储。

这是一种比较暴力的方法,有很多的循环和判断,找五种烷烃基的不同。

代码: #include using namespace std; int main() { int n; cin >> n; int ab[7][7]; int row[7];//记录每一个点的连线个数 int sum[5];//记录点的连线数为1 2 3 4的点的个数 for (int k = 0; k < n; k++) { for (int i = 0; i < 7; i++)//初始化任意两点之间没有线 for (int j = 0; j < 7; j++) ab[i][j] = 0; for (int j = 1; j > a; cin >> b; ab[a][b] = 1;//a,b之间连线 ab[b][a] = 1; } for (int i = 1; i < 7; i++)//初始化row row[i] = 0; for (int i = 1; i < 7; i++) for (int j = 1; j < 7; j++) if (ab[i][j] == 1) row[i]++; for (int i = 0; i < 5; i++) sum[i] = 0; for (int i = 1; i < 7; i++) sum[row[i]]++; if (sum[4] == 1)//只有一种烷烃基有一个点的连线数是4 cout << "2,2-dimethylbutane" << endl; else if (sum[3] == 2 && sum[1] == 4) cout << "2,3-dimethylbutane" << endl; else if (sum[1] == 2 && sum[2] == 4) cout << "n-hexane" << endl; else { int hav3; int hav2_1, hav2_2; bool hav2 = false; for (int i = 0; i < 7; i++) { if (row[i] == 3) hav3 = i; else if (row[i] == 2 && hav2 == false) { hav2_1 = i; hav2 = true; } else if (row[i] == 2) hav2_2 = i; } if (ab[hav3][hav2_1] == 1 && ab[hav3][hav2_2] == 1) cout << "3-methylpentane" << endl; else cout << "2-methylpentane" << endl; } } }
作者:唸♪安



烃基 化学 类别

需要 登录 后方可回复, 如果你还没有账号请 注册新账号