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

หาจำนวนคำตอบของสมการ x + y + z ≤ n ด้วย C++

ในบทความนี้ เราจะอธิบายวิธีการหาจำนวนคำตอบของสมการ 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 ได้เช่นกัน