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

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


ภาพรวมปัญหา

หาจำนวนกลุ่มขนาด 3 สูงสุด ที่สร้างได้จาก N ไอเทมประเภท A และ M ไอเทมประเภท B โดยแต่ละกลุ่มต้องมีทั้ง 2 ประเภทอย่างน้อย 1 ชิ้น

ตัวอย่าง

Input: N = 3, M = 5
Output: 2
Groups: (1A,2B), (1A,2B) ใช้ 2A และ 4B

Input: N = 5, M = 9
Output: 4

แนวทางแก้ปัญหา (4 กรณี)

  • M ≥ 2N: ตอบ = N
  • N ≥ 2M: ตอบ = M
  • (M+N) % 3 == 0: ตอบ = (M+N)/3
  • อื่นๆ: ตอบ = (M+N)/3 + (เหลือพอสร้างกลุ่มเพิ่มไหม?)

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

#include <bits/stdc++.h>
using namespace std;

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