ในบทความนี้ เราจะอธิบายวิธีการหาจำนวนคำตอบของสมการ x + y + z ≤ n ในโจทย์นี้ เรามีสมการที่มีตัวแปร 4 ตัว และงานคือการหาคำตอบสำหรับสมการที่กำหนด ตัวอย่างง่ายๆ ดังนี้:
Input: X = 1, Y = 1, Z = 1, n = 1 Output: 4 Input: X = 1, Y = 2, Z = 3, n = 4 Output: 3
ในปัญหานี้ เราสามารถวนลูปผ่านค่าทั้งหมดของ (x, y), (y, z), (x, z) โดยแยกตัวแปรแต่ละตัวและตรวจสอบว่าตอบโจทย์สมการหรือไม่
วิธีการหาคำตอบ
ตอนนี้เราจะใช้วิธี Brute Force เพื่อหาคำตอบของปัญหาที่กำหนด
วิธี Brute Force
ในโปรแกรมนี้ เราจะวนลูปผ่านค่าที่เป็นไปได้ทั้งหมดของ (x, y), (y, z) และ (x, z) โดยที่ตอบโจทย์สมการ z ≤ n - x - y (ที่แยก z ออกมา) โดยที่ 0 ≤ z ≤ Z (และเหมือนกันสำหรับตัวแปรอื่นๆ ที่แยกออกมา)
ตัวอย่างโค้ด
#include<bits/stdc++.h>
using namespace std;
int main() {
int X = 1, Y = 2, Z = 3, n = 4; // ขีดจำกัดของ x, y, z และ n ที่กำหนด
int answer = 0; // ตัวนับคำตอบ
for(int i = 0; i <= X; i++) {
for(int j = 0; j <= Y; j++) {
int temp = (n - i) - j; // temp = n - x - y
if(temp >= Z) { // หาก n - x - y ≥ z ให้เพิ่มคำตอบ
answer++;
}
}
}
for(int i = 0; i <= X; i++) {
for(int j = 0; j <= Z; j++) {
int temp = (n - i) - j; // temp = n - x - y
if(temp >= Y) { // หาก n - x - z ≥ y ให้เพิ่มคำตอบ
answer++;
}
}
}
for(int i = 0; i <= Z; i++) {
for(int j = 0; j <= Y; j++) {
int temp = (n - i) - j; // temp = n - x - y
if(temp >= X) { // หาก n - z - y ≥ x ให้เพิ่มคำตอบ
answer++;
}
}
}
cout << answer << "\n";
return 0;
}
ผลลัพธ์
17
คำอธิบายโปรแกรม
ในโปรแกรมนี้ เราจะวนลูปผ่านการจัดหมู่ทั้งหมดของ (x, y), (y, z), (x, z) โดยใช้ nested for loop และตรวจสอบสมการว่าตอบโจทย์หรือไม่ และหากตอบโจทย์ เราจะเพิ่มตัวนับคำตอบ
สรุป
ในบทความนี้ เราแก้ปัญหาการหาจำนวนคำตอบที่ตอบโจทย์สมการ x + y + z ≤ n ด้วยความซับซ้อนด้านเวลา O(X×Y) เรายังเรียนรู้โปรแกรม C++ สำหรับปัญหานี้ และวิธีการแก้ปัญหาทั้งหมด สามารถเขียนโปรแกรมเดียวกันในภาษาอื่นๆ เช่น C, Java, Python ได้เช่นกัน