Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ตรวจสอบว่าโมเลกุลสามารถสร้างจาก 3 อะตอมด้วย Valence Number ใน C++

Valence Number = จำนวนพันธะที่อะตอมต้องสร้าง กำหนด Valence ของ 3 อะตอม (a, b, c) ตรวจสอบว่าสร้างโมเลกุลได้หรือไม่ (พันธะหลายพันธะระหว่างคู่อะตอมได้)

ตัวอย่าง: 2, 4, 2 → YES (พันธะ: 1-2, 1-2, 2-3, 2-3)

เงื่อนไขที่สร้างไม่ได้

  1. a + b + c เป็นเลขคี่ → ทุกพันธะลด Valence รวมลง 2 (Even) ดังนั้น Sum ต้องเป็น Even
  2. 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