烷烃基结构(week2 实验A)

化学----烷烃基

化学很神奇,以下是烷烃基。
在这里插入图片描述
假设如上图,这个烷烃基有6个原子和5个化学键,6个原子分别标号1~6,然后用一对数字 a,b 表示原子a和原子b间有一个化学键。这样通过5行a,b可以描述一个烷烃基

你的任务是甄别烷烃基的类别。
原子没有编号方法,比如
1 2
2 3
3 4
4 5
5 6

1 3
2 3
2 4
4 5
5 6
是同一种,本质上就是一条链,编号其实是没有关系的,可以在纸上画画就懂了

Input

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

Output

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

Example

Input

2
1 2
2 3
3 4
4 5
5 6
1 4
2 3
3 4
4 5
5 6

Output

n-hexane
3-methylpentane

我的解决方案:

通过每个点的度数规律判断。在输入时,就进行记录,记录每个度数对应的点数,通过每个度的点数就可以判断出大部分的结构。最后有两个结构体(“2-methylpentane"和"3-methylpentane”)不可以根据此规律判断,就按照相邻点的度数来判断。

#include<iostream>
using namespace std;
int mem[7];
int co[5];

struct pa
{
    int a,b;
};
pa sta[5];
void re_mem()
{
    for(int i=1;i<7;i++)
        mem[i]=0;
    for(int i=1;i<5;i++)
        co[i]=0;
}

int get_num(int c)
{
    for(int i=1;i<7;i++)
        if(mem[i]==c) return i;
}

void jug()
{
    for(int i=1;i<7;i++)
    {
        co[mem[i]]++;
    }
    if(co[1]==2&&co[2]==4) cout<<"n-hexane"<<endl;
    else
    {
        if(co[1]==4)
        {
            if(co[4]==1) cout<<"2,2-dimethylbutane"<<endl;
            else cout<<"2,3-dimethylbutane"<<endl;
        }
        else
        {
            int f3=get_num(3);
            int a1[3],kn=0,ann=0;
            for(int i=0;i<5;i++)
            {
                if(sta[i].b==f3) a1[kn++]=sta[i].a;
                if(sta[i].a==f3) a1[kn++]=sta[i].b;
            }
            for(int i=0;i<3;i++)
                ann+=mem[a1[i]];
            if(ann==4) cout<<"2-methylpentane"<<endl;
            else cout<<"3-methylpentane"<<endl;
        } 
    }
}

int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        re_mem();
        for(int k=0;k<5;k++)
        {
            cin>>sta[k].a>>sta[k].b;
            mem[sta[k].a]++,mem[sta[k].b]++;
        }
        jug();
    }
    return 0;
}
发布了26 篇原创文章 · 获赞 0 · 访问量 459

猜你喜欢

转载自blog.csdn.net/qq_43738677/article/details/104667360
今日推荐