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

相关文章

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

C++中RAII资源获取即初始化

《C++中RAII资源获取即初始化》RAII通过构造/析构自动管理资源生命周期,确保安全释放,本文就来介绍一下C++中的RAII技术及其应用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、核心原理与机制二、标准库中的RAII实现三、自定义RAII类设计原则四、常见应用场景1. 内存管理2. 文件操

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

java中long的一些常见用法

《java中long的一些常见用法》在Java中,long是一种基本数据类型,用于表示长整型数值,接下来通过本文给大家介绍java中long的一些常见用法,感兴趣的朋友一起看看吧... 在Java中,long是一种基本数据类型,用于表示长整型数值。它的取值范围比int更大,从-922337203685477

C++作用域和标识符查找规则详解

《C++作用域和标识符查找规则详解》在C++中,作用域(Scope)和标识符查找(IdentifierLookup)是理解代码行为的重要概念,本文将详细介绍这些规则,并通过实例来说明它们的工作原理,需... 目录作用域标识符查找规则1. 普通查找(Ordinary Lookup)2. 限定查找(Qualif

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

详解Linux中常见环境变量的特点与设置

《详解Linux中常见环境变量的特点与设置》环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息,理解环境变量对于系统管理、软件开发都很重要,下面小编就为大家详细介绍一下吧... 目录前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变