Chúng ta được cung cấp 5 biến số nguyên Num, P1, P2, profit_P1, profit_P2 và nhiệm vụ là tối đa hóa lợi nhuận và từ tất cả các số tự nhiên trong phạm vi [1, Num]. Cách tiếp cận ở đây là nếu một số dương chia hết cho P1 thì lợi nhuận tăng lên cho profit_P1 và tương tự nếu số trong phạm vi chia hết cho P2 thì tỷ suất lợi nhuận của profit_P2 tăng lên. Ngoài ra, lợi nhuận từ một số nguyên dương có thể được cộng nhiều nhất một lần.
Hãy cho chúng tôi hiểu với ví dụ:-
Đầu vào - int num =4, P1 =6, P2 =2, profit_P1 =8, profit_P2 =2;
Đầu ra - Tối đa hóa tổng lợi nhuận của tất cả những người X 4
Giải thích −Ở đây chúng ta có số nằm trong khoảng từ 1 đến 4 ([1, Num (4)])
Không có số nào trong chuỗi chia hết cho P1
1 và 2 chia hết cho P2
1 và 2 chia hết cho P2 để nhận được lợi nhuận là 2 * 2 = 4
Đầu vào - num =3, P1 =1, P2 =2, profit_P1 =3, profit_P2 =4
Đầu ra - Tối đa hóa tổng lợi nhuận của tất cả những người X 10
Giải thích - 1, 2 và 3 chia hết cho A.
2 là số duy nhất trong dãy đã cho chia hết cho B.
2 chia hết cho cả A và B.
1 và 3 có thể được chia cho A để được lợi nhuận là 2 * 3 =6
2 có thể được chia cho B để có lợi nhuận là 1 * 4 =4
2 chia hết cho cả hai nhưng để tối đa hóa lợi nhuận thì người ta chia cho B thay vì A.
Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau -
-
Chúng tôi được cung cấp 6 biến số nguyên bao gồm phạm vi số dương (Num), P1 mô tả người đầu tiên, P2 mô tả người thứ hai, lợi nhuận_P1 giống với lợi nhuận của người 1 (nghĩa là nếu số trong phạm vi số đã cho là chia hết cho P1 profit_P1 tăng) và tương tự như vậy profit_P2.
-
Bên trong hàm chính, một phương thức được gọi là (profitMaximisation), là phương pháp hữu ích cho tất cả các phép tính.
-
Bên trong hàm, có thể thấy rằng mọi số chỉ chia hết cho cả P1 và P2 nếu số đó là bội số của LCM của P1 hoặc P2.>
-
Vì vậy, ở đây nó được tính bằng lợi nhuận_P1 * (num / P1) + lợi nhuận_P2 * (num / P2) - tối thiểu (lợi nhuận_P1, lợi nhuận_P2) * (num / lcm (P1, P2)) .
-
Một phương pháp được giới thiệu là CalculGcd () để tính lcm của các số đã cho.
-
Đầu ra cuối cùng được ghi lại trong phương thức chính và hiển thị cho người dùng dưới dạng đầu ra.
Ví dụ
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)); } }
Đầu ra
Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra Kết quả sau
Maximize the total profit of all the persons X 12