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