題目描述:
化學很神奇,以下是烷烴基。
假設如上圖,這個烷烴基有6個原子和5個化學鍵,6個原子分別標號1~6,然後用一對數字 a,b 表示原子a和原子b間有乙個化學鍵。這樣通過5行a,b可以描述乙個烷烴基
你的任務是甄別烷烴基的類別。
原子沒有編號方法,比如12 23 34 45 56和13 23 24 45 56是同一種,本質上就是一條鏈,編號其實是沒有關係的,可以在紙上畫畫就懂了。
可以運用暴力解法,題目只需要我們鑑別這五種烷烴基,故找出這五種烴基的區別即可,即對於每一種烷烴基,找出能唯一區分它的特徵。
解題思路;
我的區分方法是「原子鄰居法」,即找出六個原子中最受歡迎的原子(即與之相連的原子最多),稱之為原子c位(原子c位可能不止乙個),原子c位的鄰居數為c鄰居數,此外,端原子(只有乙個鄰居)也是一種輔助區分方法,仔細觀察這五種烷烴基,可以發現:
n-hexane的c鄰居數為2,
2,2-dimethylbutane的c鄰居數為4
其餘三種的c鄰居數為3
如何區分這三種呢,
2,3-dimethylbutane有兩個原子c位
3-methylpentane的原子c位有1個端原子鄰居
2-methylpentane的原子c位有2個端原子鄰居
至此,五種烷烴基能夠完全區分。
(區分方法還有很多,思考還能得出很多種原子鄰居區分法)
實驗**:
```cpp
#include
using
namespace std;
intmain
(void);
//陣列表示兩兩原子間是否相連
int arr[7]
=;//記錄每個原子與多少個原子相連
for(
int i=
0;i<
5;i++
)//找出max
int max=0;
//記錄c鄰居數
int maxnum=1;
//記錄原子c位個數
int maxi=0;
//記錄原子c位序號
for(
int i=
0;i<=
6;i++
)else
if(arr[i]
==max)
maxnum++;}
//判斷
if(max==2)
cout<<
"n-hexane"
<
else
if(max==4)
cout<<
"2,2-dimethylbutane"
<
else
//max==3}}
return0;
}
Week2實驗 A 化學
問題描述 有六個原子,其中原子隨意編號,給定五條原子之間相連的邊,判斷輸入結構是下圖的哪一種 思路 很顯然可以用每個原子的度來判斷,但是有兩個結構的最大度數都是3,3 methy 和 2 methy 進一步判斷發現3 methy連線了兩個度為2的原子,根據此就能區分這兩個。最初的 比較繁瑣,後來經過...
Week2實驗 A 化學 模擬
包含6個原子和5個化學鍵的烷烴基共有5種,用1 6標號6個原子,然後用一對數字a,b表示原子a和原子b之間有乙個化學鍵。給定5行a,b,判斷出它的類別,輸出其化學名稱 見下圖 原子沒有標號方法,即同乙個原子可能標號為1,也可能為2,依次類推。首先找出5種類別之間較大的區別 n 類的各原子鍵數分別為1...
Week2實驗A題 化學
化學很神奇,以下是烷烴基。你的任務是甄別烷烴基的類別。原子沒有編號方法。輸入 輸入第一行為資料的組數t 1 t 200000 每組資料有5行,每行是兩個整數a,b 1 a,b 6,a b 資料保證,輸入的烷烴基是以上5種之一 輸出 每組資料,輸出一行,代表烷烴基的英文名 樣例 input 21 2 ...