เราได้รับจำนวนเต็มห้าจำนวน N, A, B, X และ ใช่ . เป้าหมายคือการเพิ่มผลกำไรสูงสุดโดยตรวจสอบว่าระหว่างตัวเลขในช่วง [ 1 ถึง N ] ถ้า
-
ตัวเลขหารด้วย A ลงตัว จากนั้นกำไรจะเพิ่มขึ้น X .
-
ตัวเลขหารด้วย B ลงตัว กำไรจะเพิ่มขึ้น Y .
กำไรสามารถเพิ่มได้เพียงครั้งเดียวสำหรับตัวเลขเฉพาะในช่วง
มาทำความเข้าใจกับตัวอย่างกัน
ป้อนข้อมูล − N=4, A=2, B=3, X=2, Y=3
ผลผลิต − กำไรสูงสุดคือ − 7
คำอธิบาย −
2,4 หารด้วย A ลงตัว ( 2 ) กำไรเพิ่มขึ้นจาก 0 เป็น 2 จากนั้น 2 เป็น 4 (โดย X=2 )
3 หารด้วย B ลงตัว ( 3 ) กำไรเพิ่มขึ้นจาก 4 เป็น 7 (โดย Y=3)
ป้อนข้อมูล − N=5, A=2, B=4, X=1, Y=3
ผลผลิต − กำไรสูงสุดคือ:4
คำอธิบาย −
2,4 หารด้วย A ( 2 ).
4 หารด้วย B ลงตัวด้วย ( 4 )
สำหรับ 2 กำไรเพิ่มขึ้นจาก 0 เป็น 1 (โดย X) สำหรับ 4 เราเลือกการหารด้วย B ดังนั้น กำไรจะเพิ่มขึ้นโดย Y ไม่ใช่ X เนื่องจาก Y มากกว่า ดังนั้นมันจึงเพิ่มขึ้นจาก 1 เป็น 4 ( โดย Y=3 )
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
เรามีจำนวนเต็ม N, A, B, X, Y.
-
ฟังก์ชั่น maximaProfit(int n, int a, int b, int x, int y) คำนวณกำไรและส่งกลับค่า ใช้ตัวแปรทั้งหมดเป็นพารามิเตอร์และส่งกลับกำไรสูงสุด
-
กำไรผันแปรจะมีจำนวนกำไร เริ่มต้น 0
-
เริ่มจาก 1 ถึง n ตรวจสอบการหารของ i ด้วย a และ b โดยใช้ for loop
-
หาก i หารด้วย a และ b ลงตัว ให้เพิ่มผลกำไรด้วย x หรือ y แล้วแต่จำนวนใดจะมากกว่า
-
มิฉะนั้นถ้าฉันหารด้วย a เท่านั้น ให้เพิ่มกำไรโดย x
-
มิฉะนั้นถ้าฉันหารด้วย b เท่านั้นให้เพิ่มผลกำไรด้วย y
-
ที่ส่วนท้ายมูลค่าผลตอบแทนที่มีอยู่ในกำไรตามผลลัพธ์
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; // Function to return the maximum profit int maximizeProfit(int n, int a, int b, int x, int y){ int profit=0; for(int i=1;i<=n;i++){ if(i%a==0 && i%b==0){ int maxx=x>=y?x:y; profit+=maxx; } else if(i%a==0){ profit+=x; } else if(i%b==0){ profit+=y; } } return profit; } int main(){ int N = 6, A = 2, B =4, X = 6, Y = 3; cout <<"Maximized profit is: "<<maximizeProfit(N,A,B,X,Y); return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Maximized profit is: 2