Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

จำนวนสูงสุดของกลุ่มขนาด 3 ที่มีรายการสองประเภทใน C++


ภารกิจคือการคำนวณจำนวนสูงสุดของกลุ่มขนาด 3 ที่สามารถเกิดขึ้นได้เมื่อ N จำนวนรายการประเภท A และ M จำนวนรายการประเภท B

นอกจากนี้ แต่ละกลุ่มควรมีอย่างน้อยหนึ่งรายการในแต่ละประเภท นั่นคือ A หรือ B

ตอนนี้มาทำความเข้าใจสิ่งที่เราต้องทำโดยใช้ตัวอย่าง -

ป้อนข้อมูล − N=3, M=5

ป้อนข้อมูล − 2

คำอธิบาย

Group 1: 1 item of type A and 2 items of type B
Group 2: 1 item of type A and 2 items of type B
In total, 2 items of type A and 4 items of type B are used.

ป้อนข้อมูล − N=5, M=9

ป้อนข้อมูล − 4

แนวทางที่ใช้ในโปรแกรมด้านล่างดังนี้

  • สถานการณ์ต่อไปนี้สามารถแบ่งออกเป็น 4 กรณี -

    • กรณีที่ 1

      เมื่อ M>=2N จำนวนกลุ่มสูงสุดที่เป็นไปได้ =M

    • กรณีที่ 2

      เมื่อ N>=2M จำนวนกลุ่มสูงสุดที่เป็นไปได้ =N

    • กรณีที่ 3

      เมื่อ (M+N) % 3 ==0 ดังนั้นจำนวนกลุ่มสูงสุดที่เป็นไปได้ =(M+N)/3

    • กรณีที่ 4

      เมื่อไม่มีเงื่อนไขข้างต้นเป็นจริง จำนวนกรณีสูงสุดจะกลายเป็น (M+N)/3 + (กลุ่มใด ๆ ที่เหลือ)

      หากต้องการตรวจสอบว่ามีกลุ่มใดเหลืออยู่ ให้ตั้งค่า N=N%3 และ M=M%3 เพื่อรับรายการที่เหลือของทั้งสองประเภท จากนั้นตรวจสอบโดยใช้เงื่อนไขต่อไปนี้ -

      ถ้า ( N!=0 &&M!=0 &&(N+M)>=3)

      หากเงื่อนไขข้างต้นเป็นจริง ให้บวก 1 เข้ากับผลลัพธ์สุดท้าย

  • ในฟังก์ชัน MaxGrp() โดยใช้ if condition ตรวจสอบกรณีข้างต้น

  • ถ้า( M>=2*N ) เป็นจริง ให้คืนค่า M เป็นคำตอบ อื่น ถ้า( N>=2*M ) เป็นจริง ให้คืนค่า N เป็นคำตอบ

  • หากเงื่อนไขทั้งสองข้างต้นไม่เป็นความจริง ให้ตรวจสอบว่า ( (M + N)%3 ==0 ) หากเป็นจริงให้คืนค่า (M + N)/3 เป็นคำตอบ

  • หากไม่มีเงื่อนไขข้างต้นเป็นจริง ให้เริ่มต้นตัวแปร count =(M + N)/3 ของประเภท int

    ใส่ N=N%3 และ M=M%3 แล้วตรวจสอบกลุ่มที่เหลือโดยใช้เงื่อนไขที่ระบุไว้ข้างต้นในกรณีที่ 4 หากเงื่อนไขเป็นจริง ให้เพิ่ม 1 เพื่อนับและส่งคืนคำตอบ

ตัวอย่าง

#include<bits/stdc++.h>
using namespace std;
// Implements above mentioned steps.
int MaxGrp(int N, int M){
   if (N >= 2 * M)
      return N;
   if (M >= 2 * N)
      return M;
   if ((M + N) % 3 == 0)
      return (M + N)/3;
   int count = (M + N)/3;
   M %= 3;
   N %= 3;
   if (M && N && (M + N) >= 3)
      count++;
   return count;
}
int main(){
   int N = 5, M = 9;
   cout << MaxGrp(N, M);
   return 0;
}

ผลลัพธ์

หากเราเรียกใช้โค้ดข้างต้น เราจะได้ผลลัพธ์ดังต่อไปนี้ -

4