เราได้รับตัวแปรจำนวนเต็ม 5 ตัว Num, P1, P2, profit_P1, profit_P2 และภารกิจคือการเพิ่มผลกำไรสูงสุดและจากตัวเลขธรรมชาติทั้งหมดในช่วง [1,Num] แนวทางที่นี่คือหากจำนวนบวกหารด้วย P1 ลงตัว กำไรจะเพิ่มขึ้นด้วย profit_P1 และในทำนองเดียวกันหากตัวเลขในช่วงหารด้วย P2 ลงตัว กำไรขั้นต้นของ profit_P2 จะเพิ่มขึ้น นอกจากนี้ กำไรจากจำนวนเต็มบวกสามารถเพิ่มได้ไม่เกินครั้งเดียว
ให้เราเข้าใจด้วยตัวอย่าง:-
ป้อนข้อมูล − int num =4, P1 =6, P2 =2, profit_P1 =8, profit_P2 =2;
ผลผลิต − เพิ่มผลกำไรทั้งหมดของบุคคลทั้งหมด X 4
คำอธิบาย −ที่นี่เรามีตัวเลขตั้งแต่ 1 ถึง 4([1,Num(4)])
ไม่มีตัวเลขในชุดใดหารด้วย P1
1 และ 2 หารด้วย P2 ลงตัว
1 และ 2 หารด้วย P2 ลงตัวเพื่อให้ได้กำไร 2*2=4
ป้อนข้อมูล − num =3, P1 =1, P2 =2, profit_P1 =3, profit_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 หารด้วยทั้งสองลงตัว แต่เพื่อเพิ่มผลกำไรสูงสุด ให้หารด้วย B แทน A
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้ −
-
เราได้รับตัวแปรจำนวนเต็ม 6 ตัวที่รวมช่วงจำนวนบวก (Num), P1 ซึ่งแสดงถึงบุคคลที่หนึ่ง, P2 หมายถึงบุคคลที่สอง,profit_P1 ซึ่งคล้ายกับกำไรของบุคคล 1 (เช่นถ้าตัวเลขในช่วงตัวเลขที่กำหนดคือ หารด้วยกำไร P1 เพิ่มขึ้น P1) และกำไรในทำนองเดียวกัน_P2
-
ภายในฟังก์ชันหลักจะเรียกเมธอด (profitMaximisation) ซึ่งเป็นวิธีอรรถประโยชน์สำหรับการคำนวณทั้งหมด
-
ภายในฟังก์ชันจะเห็นได้ว่าทุกตัวเลขที่หารด้วยทั้ง P1 และ P2 ลงตัวก็ต่อเมื่อตัวเลขนั้นเป็นผลคูณของ LCM ของ P1 หรือ P2 นอกจากนี้ควรหารด้วยตัวเลขที่ให้ผลกำไรมากกว่า
-
ดังนั้นในที่นี้จึงคำนวณโดย profit_P1 * (num / P1) + profit_P2 * (num / P2) – min(profit_P1, profit_P2) * (num / lcm(P1, P2)) .
-
มีการแนะนำวิธีการ CalculateGcd() เพื่อคำนวณ lcm ของตัวเลขที่กำหนด
-
เอาต์พุตสุดท้ายถูกจับในวิธีการหลักและแสดงให้ผู้ใช้เห็นเป็นเอาต์พุต
ตัวอย่าง
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