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

C++에서 두 숫자로 나눌 수 있는 관련 이익이 있는 경우 이익 극대화


5개의 정수가 주어집니다. N, A, B, X Y . 목표는 다음과 같은 경우 [ 1 ~ N ] 범위의 숫자 사이를 확인하여 이익을 최대화하는 것입니다.

  • 숫자를 A로 나누면 이익이 X 증가합니다. .

  • 숫자를 B로 나눌 때 이익이 Y 증가합니다. .

이익은 범위 내의 특정 숫자에 대해 한 번만 추가할 수 있습니다.

예를 들어 이해합시다.

입력 - N=4, A=2, B=3, X=2, Y=3

출력 − 최대 이익은 − 7입니다.

설명 -

2,4는 A(2)로 나눌 수 있습니다. 이익이 0에서 2로 증가하고 2에서 4로 증가합니다(X=2만큼)

3은 B(3)로 나누어 떨어집니다. 이익이 4에서 7로 증가합니다. (Y=3 기준)

입력 - N=5, A=2, B=4, X=1, Y=3

출력 − 최대 이익:4

설명 -

2,4는 A( 2 )로 나눌 수 있습니다.

4는 B( 4 )로도 나눌 수 있습니다.

2의 경우 이익이 0에서 1로 증가합니다(X만큼). 4의 경우 B로 나눌 수 있는 가능성을 선택했습니다. 따라서 Y가 클수록 이익은 X가 아니라 Y만큼 증가합니다. 따라서 1에서 4로 증가합니다( Y=3 기준).

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

  • 정수 N, A, B, X, Y가 있습니다.

  • 함수 maximumProfit(int n, int a, int b, int x, int y)는 이익을 계산하고 값을 반환합니다. 모든 변수를 매개변수로 받아 최대의 수익을 반환합니다.

  • 변동 이익은 초기에 0의 이익 금액을 갖습니다.

  • 1부터 n까지 for 루프를 사용하여 i가 a와 b로 나누어지는지 확인합니다.

  • i가 b와 둘 다로 나눌 수 있는 경우 x 또는 y 중 더 큰 값만큼 이익을 늘립니다.

  • 그렇지 않고 i가 만으로 나누어지면 이익을 x만큼 증가

  • 그렇지 않고 i가 b로만 나누어지면 이익을 y만큼 증가

  • 결과적으로 이익에 존재하는 최종 반환 값.

예시

#include <bits/stdc++.h>
using namespace std;
// Function to return the maximum profit
int maximizeProfit(int n, int a, int b, int x, int y){
   int profit=0;
   for(int i=1;i<=n;i++){
      if(i%a==0 && i%b==0){
         int maxx=x>=y?x:y;
         profit+=maxx;
      }
      else if(i%a==0){
         profit+=x;
      }
      else if(i%b==0){
         profit+=y;
      }
   }
   return profit;
}
int main(){
   int N = 6, A = 2, B =4, X = 6, Y = 3;
   cout <<"Maximized profit is: "<<maximizeProfit(N,A,B,X,Y);
   return 0;
}

출력

위의 코드를 실행하면 다음 출력이 생성됩니다 -

Maximized profit is: 2