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

相关文章

MySQL 索引简介及常见的索引类型有哪些

《MySQL索引简介及常见的索引类型有哪些》MySQL索引是加速数据检索的特殊结构,用于存储列值与位置信息,常见的索引类型包括:主键索引、唯一索引、普通索引、复合索引、全文索引和空间索引等,本文介绍... 目录什么是 mysql 的索引?常见的索引类型有哪些?总结性回答详细解释1. MySQL 索引的概念2

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

C++11范围for初始化列表auto decltype详解

《C++11范围for初始化列表autodecltype详解》C++11引入auto类型推导、decltype类型推断、统一列表初始化、范围for循环及智能指针,提升代码简洁性、类型安全与资源管理效... 目录C++11新特性1. 自动类型推导auto1.1 基本语法2. decltype3. 列表初始化3

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

C++中detach的作用、使用场景及注意事项

《C++中detach的作用、使用场景及注意事项》关于C++中的detach,它主要涉及多线程编程中的线程管理,理解detach的作用、使用场景以及注意事项,对于写出高效、安全的多线程程序至关重要,下... 目录一、什么是join()?它的作用是什么?类比一下:二、join()的作用总结三、join()怎么

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder

C++中全局变量和局部变量的区别

《C++中全局变量和局部变量的区别》本文主要介绍了C++中全局变量和局部变量的区别,全局变量和局部变量在作用域和生命周期上有显著的区别,下面就来介绍一下,感兴趣的可以了解一下... 目录一、全局变量定义生命周期存储位置代码示例输出二、局部变量定义生命周期存储位置代码示例输出三、全局变量和局部变量的区别作用域

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

c++ 类成员变量默认初始值的实现

《c++类成员变量默认初始值的实现》本文主要介绍了c++类成员变量默认初始值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录C++类成员变量初始化c++类的变量的初始化在C++中,如果使用类成员变量时未给定其初始值,那么它将被