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

เพิ่มค่าของ x + y + z ให้สูงสุด โดยที่ ax + by + cz =n ใน C++


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

จากสูตรข้างต้น

cz=n-(ax+by)
z= (n- (ax+by))/c

โดยกำหนด 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 ax+by+cz=n.

3*2+0*4+0*5=6 =น

อินพุต

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

ผลลัพธ์

maximum x+y+z=4

คำอธิบาย − สำหรับ x=0, y=4 และ z=4 ax+by+cz=n.

0*3+4*1+0*2=4 =น

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

  • จำนวนเต็ม a,b,c,และ n ใช้สำหรับนิพจน์ ax+by+cz=n

  • ฟังก์ชั่นขยายใหญ่สุด (,int n,int a,int b,int c) รับ a, b, c และ n เป็นอินพุตและส่งกลับผลรวมที่เป็นไปได้สูงสุดของ x, y และ z เพื่อให้ ax+by+cz=n.

  • รับค่า axe ที่เป็นไปได้ทั้งหมด for(i=0;i<=n;i+=a) ด้วย

  • หาค่าที่เป็นไปได้ทั้งหมดด้วยค่า for(j=0;j<=n;j+=b),

  • คำนวณ z=(n- (ax+by))/c.

  • ตอนนี้ x=i/a และ y=j/b คำนวณ x+y+z และเก็บในอุณหภูมิ

  • หาก temp> =maxx จนถึงตอนนี้ ให้อัปเดต maxx

  • คืนค่า maxx เป็นจำนวนที่ต้องการ

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
int maximize(int n, int a, int b, int c){
   int maxx = 0;
   // i for possible values of ax
   for (int i = 0; i <= n; i += a)
      // j for possible values of by
   for (int j = 0; j <= n - i; j += b) {
      float z = (n - (i + j)) / c;
      // If z is an integer
      if (floor(z) == ceil(z)) {
         int x = i / a;
         int y = j / b;
         int temp=x+y+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