Expérience 2A Classification des alcanes

Le titre

Supposons que, comme indiqué ci-dessus, ce groupe alcane a 6 atomes et 5 liaisons chimiques, les 6 atomes sont étiquetés 1 ~ 6, puis une paire de nombres a, b indique qu'il existe une liaison chimique entre l'atome a et l'atome b. De cette façon, vous pouvez décrire un groupe alcane à travers 5 lignes a et b
Votre tâche consiste à identifier le type de groupe alcane.
Il n'y a pas de méthode de numérotation pour les atomes. La numérotation n'est pas pertinente. Vous pouvez dessiner sur du papier pour comprendre le
nombre T de la première ligne de saisie de données (1≤T≤200000). Chaque groupe de données a 5 lignes, chaque ligne est composée de deux entiers a, b (1 ≤ a, b ≤ 6, a ≤ b)
garantie de données, le groupe alcane d'entrée est l'un des 5 types ci-dessus de
chaque groupe de données, affiche une ligne, représentant Nom anglais de l'alcane

Des idées

Comme le titre garantit qu'il n'y a que 5 cas, vous pouvez utiliser une classification violente. J'utilise ici la classification des degrés en points. Le tableau Jilu est utilisé pour stocker le degré de chaque nœud. La fonction count () obtient le degré maximum, le nombre et la valeur maximale du point Numéro. S'il existe deux degrés maximum identiques qui sont le "2,3-diméthylbutane", le degré maximum est 4 et seul le 2,2-diméthylbutane est possible. Si le degré maximum est 3, il y a plusieurs degrés au point où le point est connecté. Pour le point 1, s'il y en a deux, il s'agit du "2-méthylpentane", l'un est du "3-méthylpentane" et enfin il n'y a qu'un seul cas de "n-hexane".

Résumé

Analysez calmement et tapez le code après avoir réfléchi

Code

#include<stdio.h>
#include<string.h> 
#include<iostream>
using namespace std;

int jilu[7]={0,0,0,0,0,0,0};//保存度数
//for(int i=0;i<7;i++)
//jilu[i]=0;
struct edge
{
	int a,b;
};
edge ed[5];
int count(edge*a,int&no,int&num)
{//no 最大数的编号  num 最大值的数量 返回值为最大值 
for(int i=0;i<7;i++)
jilu[i]=0;
	for(int i=0;i<5;i++)
	{
		jilu[a[i].a]++;
		jilu[a[i].b]++;
	}
	int max=1;
	num=1;
	for(int i=1;i<7;i++)
	{
		if(max<jilu[i])
		{
			max=jilu[i];
			no=i;
		}
	}
	if(max==3)
		for(int i=no+1;i<7;i++)
		if(max==jilu[i])
			num++;
	return max;
}

int lin(int &no)
{//1 for 2,0 for 1;
	 int coun1=0;
	 for(int i=0;i<5;i++)
	 {
	 	if(ed[i].a==no)
	 	{
	 		if(jilu[ed[i].b]==1)coun1++;
		 }
		 else if(ed[i].b==no)
	 	{
	 		if(jilu[ed[i].a]==1)coun1++;
		 }
	 }
	 return coun1-1;
}


int main()
{
	int T;
	scanf("%d",&T);
	while(T--)
	{
		int max,num,no;
		for(int i=0;i<5;i++)
		cin>>ed[i].a>>ed[i].b;
		max=count(ed,no,num);
		//cout<<"max:"<<max<<" no:"<<no<<" num:"<<num<<endl;
		if(num==2)cout<<"2,3-dimethylbutane"<<endl;
		else if(max==4)cout<<"2,2-dimethylbutane"<<endl;
		else if(max==3)
		{
			if(lin(no))cout<<"2-methylpentane"<<endl;
			else cout<<"3-methylpentane"<<endl;
		}
		else cout<<"n-hexane"<<endl;
	 } 
	 
	
	return 0;
 } 

Publié 20 articles originaux · loué 3 · visites 461

Je suppose que tu aimes

Origine blog.csdn.net/qq_44893580/article/details/104671992
conseillé
Classement