Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

เพิ่มกำไรรวมสูงสุดของบุคคลทั้งหมด X ใน Java

ภาพรวมปัญหา

ได้รับตัวแปร 5 ตัว: Num, P1, P2, profit_P1, profit_P2 ต้องการหากำไรรวมสูงสุดจากจำนวนธรรมชาติทุกตัวในช่วง [1, Num] โดย:

  • ถ้าตัวเลขหาร P1 ลงตัว เพิ่มกำไร profit_P1
  • ถ้าตัวเลขหาร P2 ลงตัว เพิ่มกำไร profit_P2
  • แต่ละตัวเลขนำมาเพิ่มกำไรได้สูงสุด 1 ครั้ง (ถ้าหารทั้ง P1 และ P2 ลงตัว เลือกที่ให้กำไรมากกว่า)

ตัวอย่าง

ตัวอย่างที่ 1

Input: num = 4, P1 = 6, P2 = 2, profit_P1 = 8, profit_P2 = 2

Output: 4

คำอธิบาย: ในช่วง 1-4 ไม่มีตัวเลขไหนหาร 6 ลงตัว แต่ 2 และ 4 หาร 2 ลงตัว → กำไร = 2 × 2 = 4

ตัวอย่างที่ 2

Input: num = 3, P1 = 1, P2 = 2, profit_P1 = 3, profit_P2 = 4

Output: 10

คำอธิบาย: 1,2,3 หาร 1 ลงตัว; 2 หาร 2 ลงตัว; 2 หารทั้งคู่ → เลือกหาร 2 (กำไร 4) ส่วน 1,3 หาร 1 (กำไร 3×2=6) รวม = 10

สูตรคำนวณ

กำไรรวม = profit_P1 × (num / P1) + profit_P2 × (num / P2) − min(profit_P1, profit_P2) × (num / lcm(P1, P2))

โดย lcm(P1, P2) = (P1 × P2) / gcd(P1, P2)

ตัวอย่างโค้ด Java

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