Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 ax + by + cz =n이 되도록 x + y + z의 값을 최대화합니다.

<시간/>

정수, b, c, n이 주어집니다. 목표는 x, y, z의 합을 최대화하여 ax+by+cz=n이 되도록 하는 것입니다.

위 공식에서

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

x와 y를 고정하여 각 x, y, z에 대해 위의 공식을 사용하여 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

입력

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 =n

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

  • a, b, c 및 n 정수는 ax+by+cz=n 표현식에 사용됩니다.

  • 함수 maximum(,int n,int a,int b,int c)은 입력으로 a, b, c 및 n을 사용하고 ax+by+cz=n이 되도록 x, y 및 z의 가능한 최대 합을 반환합니다.

  • for(i=0;i<=n;i+=a), 또한

    에 대해 가능한 모든 ax 값을 취합니다.
  • (j=0;j<=n;j+=b),

    에 대한 값으로 가능한 모든 것을 취함
  • z=(n-(ax+by))/c를 계산합니다.

  • 이제 x=i/a 및 y=j/b입니다. x+y+z를 계산하고 temp에 저장합니다.

  • 지금까지 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