5개의 정수 변수 Num, P1, P2, 이익_P1, 이익_P2가 주어지고 작업은 [1,Num] 범위의 모든 자연수와 이익을 최대화하는 것입니다. 여기서의 접근 방식은 양수가 P1으로 나눌 수 있는 경우 이익이 이익_P1만큼 증가하고 유사하게 범위의 숫자가 P2로 나눌 수 있는 경우 이익_P2의 이익 마진이 증가한다는 것입니다. 또한 양의 정수에서 얻은 이익은 최대 한 번만 추가할 수 있습니다.
예를 들어 이해합시다:-
입력 - 정수 수 =4, P1 =6, P2 =2, 이익_P1 =8, 이익_P2 =2;
출력 − 모든 사람의 총 이익 극대화 X 4
설명 −여기서 1에서 4([1,Num(4)])
사이의 숫자가 있습니다.시리즈의 어떤 숫자도 P1로 나누어 떨어지지 않습니다.
1과 2는 P2로 나눌 수 있습니다.
1과 2는 P2로 나누어져 2*2=4의 이익을 얻습니다.
입력 - 숫자 =3, P1 =1, P2 =2, 이익_P1 =3, 이익_P2 =4
출력 − 모든 사람의 총 이익 극대화 X 10
설명 − 1, 2, 3은 A로 나눌 수 있습니다.
2는 주어진 범위에서 B로 나눌 수 있는 유일한 숫자입니다.
2는 A와 B로 나눌 수 있습니다.
1과 3을 A로 나누어 2 * 3 =6의 이익을 얻을 수 있습니다.
2를 B로 나누어 1 * 4 =4의 이익을 얻을 수 있습니다.
2는 둘 다 나눌 수 있지만 이익을 극대화하기 위해 A 대신 B로 나눕니다.
아래 프로그램에서 사용된 접근 방식은 다음과 같습니다 -
-
우리는 양수 범위(Num)를 포함하는 6개의 정수 변수가 주어졌습니다. P1은 첫 번째 사람을, P2는 두 번째 사람을 나타내고, 이익_P1은 사람 1의 이익과 유사합니다(즉, 주어진 숫자 범위의 숫자가 다음과 같은 경우) P1으로 나눌 수 있는 이익_P1이 증가함), 유사하게 이익_P2입니다.
-
메인 함수 내에서 모든 계산을 위한 유틸리티 메소드인(profitMaximisation) 메소드가 호출됩니다.
-
함수 내에서 P1과 P2 모두로 나누어지는 모든 숫자는 그 숫자가 P1 또는 P2의 LCM의 배수인 경우에만 볼 수 있습니다. 또한 더 많은 이익을 주는 숫자로 나누어야 합니다.
-
따라서 여기에서 profit_P1 * (num / P1) + income_P2 * (num / P2) – min(profit_P1, 이익_P2) * (num / lcm(P1, P2))로 계산됩니다. .
-
주어진 숫자의 lcm를 계산하기 위해 CalculateGcd() 메소드가 도입되었습니다.
-
최종 출력은 메인 메소드에서 캡처되어 사용자에게 출력으로 표시됩니다.
예시
public class testClass{ static int CalculateGcd(int n1, int n2){ if (n2 == 0) return n1; return CalculateGcd(n2, n1 % n2); } static int profitMaximisation(int n, int a, int b, int x, int y){ int result = x * (n / a); result += y * (n / b); result -= Math.min(x, y) * (n / ((a * b) / CalculateGcd(a, b))); return result; } public static void main(String[] args){ int num = 6, P1 = 6, P2 = 2, profit_P1 = 8, profit_P2 = 2; System.out.println("Maximize the total profit of all the persons X "+profitMaximisation(num, P1, P2, profit_P1, profit_P2)); } }
출력
위의 코드를 실행하면 다음과 같은 출력이 생성됩니다.
Maximize the total profit of all the persons X 12