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

หาค่าสูงสุดของ x + y + z ที่ทำให้ ax + by + cz = n ใน C++


เราได้รับจำนวนเต็ม a, b, c, n เป้าหมายคือเพิ่มค่าผลรวม x + y + z ให้มากที่สุด โดยที่ ax + by + cz = n

จากสูตร: cz = n - (ax + by) → z = (n - (ax + by)) / c

โดยการ fix x และ y คำนวณ z จากสูตร สำหรับ x, y, z ทุกค่า คำนวณผลรวมและเก็บค่าสูงสุด

อินพุต

n = 6, a = 3, b = 4, c = 5

เอาต์พุต

maximum x+y+z is 2

คำอธิบาย − x=2, y=0, z=0 → 3*2+0*4+0*5 = 6 = n

อินพุต

n = 4, a = 3, b = 1, c = 2

เอาต์พุต

maximum x+y+z = 4

คำอธิบาย − x=0, y=4, z=0 → 0*3+4*1+0*2 = 4 = n

วิธีการที่ใช้ในโปรแกรมด้านล่าง

  • ตัวแปร a, b, c, n สำหรับสมการ ax+by+cz=n
  • ฟังก์ชัน maximize(int n, int a, int b, int c) คืนค่าผลรวม x+y+z สูงสุด
  • ลูป i = 0 ถึง n ก้าว a (ค่า ax ที่เป็นไปได้)
  • ลูป j = 0 ถึง n-i ก้าว b (ค่า by ที่เป็นไปได้)
  • คำนวณ z = (n - (i + j)) / c
  • ถ้า z เป็นจำนวนเต็ม (floor(z) == ceil(z)) คำนวณ x=i/a, y=j/b, temp=x+y+z
  • อัปเดต maxx = max(maxx, temp)
  • คืนค่า maxx

ตัวอย่างโค้ด

#include <bits/stdc++.h>
using namespace std;

int maximize(int n, int a, int b, int c) {
    int maxx = 0;
    for (int i = 0; i <= n; i += a)
        for (int j = 0; j <= n - i; j += b) {
            float z = (n - (i + j)) / c;
            if (floor(z) == ceil(z)) {
                int x = i / a;
                int y = j / b;
                int temp = x + y + (int)z;
                if (temp >= maxx) maxx = temp;
            }
        }
    return maxx;
}

int main() {
    int n = 6, a = 3, b = 4, c = 5;
    cout << "Maximized the value of x + y + z: " << maximize(n, a, b, c);
    return 0;
}

ผลลัพธ์

Maximized the value of x + y + z: 2