Computer >> Máy Tính >  >> Lập trình >> Java

Tối đa hóa tổng lợi nhuận của tất cả những người X trong Java

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