Valence Number = จำนวนพันธะที่อะตอมต้องสร้าง กำหนด Valence ของ 3 อะตอม (a, b, c) ตรวจสอบว่าสร้างโมเลกุลได้หรือไม่ (พันธะหลายพันธะระหว่างคู่อะตอมได้)
ตัวอย่าง: 2, 4, 2 → YES (พันธะ: 1-2, 1-2, 2-3, 2-3)
เงื่อนไขที่สร้างไม่ได้
- a + b + c เป็นเลขคี่ → ทุกพันธะลด Valence รวมลง 2 (Even) ดังนั้น Sum ต้องเป็น Even
- a + b < c (c เป็นค่ามากที่สุด) → อะตอม c จะเหลือ "Free valence" ที่ต่อไม่ได้
ตัวอย่างโค้ด
#include <iostream>
#include <algorithm>
using namespace std;
bool canMakeMolecule(int a, int b, int c) {
// เรียงเพื่อให้ c เป็นค่ามากที่สุด
int arr[] = {a, b, c};
sort(arr, arr + 3);
a = arr[0]; b = arr[1]; c = arr[2];
if ((a + b + c) % 2 != 0) return false; // Sum เป็นคี่
if (a + b < c) return false; // c ใหญ่เกินไป
return true;
}
int main() {
int a = 2, b = 4, c = 2;
if (canMakeMolecule(a, b, c))
cout << "They can form Molecule";
else
cout << "They can not form Molecule";
return 0;
}
ผลลัพธ์
They can form Molecule
การพิสูจน์
หาก Sum เป็นคู่ และ a+b ≥ c สามารถสร้างพันธะได้เสมอ โดย:
- จับคู่ a และ b กับ c ตามลำดับ
- หาก a+b > c: คงเหลือ (a+b-c) ซึ่งเป็นเลขคู่ สามารถจับคู่ a-b เองได้
ตัวอย่างที่ทำไม่ได้
- 1, 1, 1 → Sum=3 (Odd) → NO
- 1, 1, 4 → Sum=6 (Even) แต่ 1+1<4 → NO