C++区分化学中某些简单的常见同分异构体

2023-10-21 11:30

本文主要是介绍C++区分化学中某些简单的常见同分异构体,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

在这里插入图片描述
如上图,,这个烷烃基有6个原子和5个化学键,6个原子分别标号1~6,然后用一对数字 a,b 表示原子a和原子b间有一个化学键。这样通过5行a,b可以描述一个烷烃基。(原子之间的编号顺序任意)
你的任务是甄别烷烃基的类别。

Input

输入第一行为数据的组数T(1≤T≤200000)。每组数据有5行,每行是两个整数a, b(1≤a,b≤6,a ≤b)数据保证,输入的烷烃基是以上5种之一

Output

每组数据,输出一行,代表烷烃基的英文名

Example

Input2
1 2
2 3
3 4
4 5
5 6
1 4
2 3
3 4
4 5
5 6Outputn-hexane
3-methylpentane

解题思路

想要区分不同的同分异构体,就要找到每一个异构体的独特之处。
由于弱鸡是弱鸡,只能采用最简单原始的方法解决问题。仔细观察上图,首先将其看成五个图(但凡了解图的人应该都能做出如此判断),然后可发现几个同分异构体之间的不同点:

  1. 五个图之间的点的度数不同。比如第一个图只有度为1和2的点,而其他的图均有度大于2的点。这便是针对这道题的一个不同点。
  2. 2-methylpentane和3-methylpentane两个图虽然度完全相同,但度为3的点所在位置不同,前者度为3的点所连接的点的度为1和2,而后者度为3的点所连接的两个点的度均为2。

到这里,本题已经解决了一半,剩下的便是将上述思路“翻译”成C++语言即可。为了方便“翻译”,可以先选择保存值所需要的变量和结构。
首先是输入值的处理,同时为了方便图的描述,选择用大小为5的结构体数组pic[5]来保存“化学键”。结构体中只包含两个int型的变量;除此之外,由于需要计算每个点的度数,因此还需要用一个int型数组deg[7](7是根据输入值决定的)来表示;同时,为了区别某些图,还要用数组sum[5]来表示每一种度数的顶点个数。

代码

ok,接下来可以直接上代码(希望不要被嫌弃!!!!!)

#include<iostream>
using namespace std;
struct node//表示化学键
{int a;int b;
};
int main()
{node pic[5];//保存输入的5个化学键int deg[7];//用来保存每一个点的度 int sum[5];//用来保存每一种度数的顶点个数 int third;//用来专门记录度为3的顶点(这里可先忽略)int n;cin>>n;for(int i=0;i<n;i++){for(int j=0;j<7;j++)deg[j]=0;for(int j=0;j<5;j++){cin>>pic[j].a>>pic[j].b;deg[pic[j].a]++;//将对应的点的度+1deg[pic[j].b]++;}for(int j=0;j<5;j++)sum[j]=0; for(int j=1;j<7;j++){sum[deg[j]]++; if(deg[j]==3)  third=j;//找到度为3的顶点 } if(sum[2]==4)cout<<"n-hexane"<<endl;if(sum[4]==1)cout<<"2,2-dimethylbutane"<<endl;if(sum[3]==2)cout<<"2,3-dimethylbutane"<<endl;if(sum[2]==2)//为了区分剩下的两个同分异构体,需要利用度为3的店和这个点连接的点的度数之和{int bb=0;//用来记录度为3的点连接的点的度数之和for(int j=0;j<5;j++){if(pic[j].a==third)bb+=deg[pic[j].b];else if(pic[j].b==third)  bb+=deg[pic[j].a];}if(bb==5)cout<<"3-methylpentane"<<endl;if(bb==4)cout<<"2-methylpentane"<<endl;		        }}return 0;
} 

反省与感想

解题方法并不好,没有做到“泛型程序设计”的目标,只是针对特定的某些同分异构体有帮助(由于实在太弱,想不到更好的方法)。更没有什么算法和程序思维的使用。各位见谅!

写在最后

作为一名程序员小白,想努力写好代码,但脑子过于迟钝,唉。。。。。没办法
不过既然选择了要学这门专业,就算再苦再难再累,也得夜以继日的敲代码(老师逼得狠,身边的大佬逼得更狠)
希望所有程序员,不管是小白还是大佬,都可以越肝越勇,少掉几根头发!!!

这篇关于C++区分化学中某些简单的常见同分异构体的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/254095

相关文章

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu2289(简单二分)

虽说是简单二分,但是我还是wa死了  题意:已知圆台的体积,求高度 首先要知道圆台体积怎么求:设上下底的半径分别为r1,r2,高为h,V = PI*(r1*r1+r1*r2+r2*r2)*h/3 然后以h进行二分 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#includ

C++包装器

包装器 在 C++ 中,“包装器”通常指的是一种设计模式或编程技巧,用于封装其他代码或对象,使其更易于使用、管理或扩展。包装器的概念在编程中非常普遍,可以用于函数、类、库等多个方面。下面是几个常见的 “包装器” 类型: 1. 函数包装器 函数包装器用于封装一个或多个函数,使其接口更统一或更便于调用。例如,std::function 是一个通用的函数包装器,它可以存储任意可调用对象(函数、函数

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h

uva 10387 Billiard(简单几何)

题意是一个球从矩形的中点出发,告诉你小球与矩形两条边的碰撞次数与小球回到原点的时间,求小球出发时的角度和小球的速度。 简单的几何问题,小球每与竖边碰撞一次,向右扩展一个相同的矩形;每与横边碰撞一次,向上扩展一个相同的矩形。 可以发现,扩展矩形的路径和在当前矩形中的每一段路径相同,当小球回到出发点时,一条直线的路径刚好经过最后一个扩展矩形的中心点。 最后扩展的路径和横边竖边恰好组成一个直

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu