Nhiệm vụ được giao là tính toán số lượng nhóm cỡ 3 tối đa có thể được hình thành khi N số lượng mặt hàng loại A và M số lượng mặt hàng loại B. P>
Ngoài ra, mỗi nhóm nên có ít nhất một mục thuộc mỗi loại, đó là A hoặc B.
Bây giờ chúng ta hãy hiểu những gì chúng ta phải làm bằng cách sử dụng một ví dụ -
Đầu vào - N =3, M =5
Đầu vào - 2
Giải thích
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.
Đầu vào - N =5, M =9
Đầu vào - 4
Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau
-
Tình huống sau có thể được chia thành 4 trường hợp -
-
Trường hợp 1 -
Khi M> =2N, thì số nhóm tối đa có thể =M
-
Trường hợp 2 -
Khi N> =2M, thì số nhóm tối đa có thể =N
-
Trường hợp 3 -
Khi (M + N)% 3 ==0, thì số nhóm tối đa có thể =(M + N) / 3
-
Trường hợp 4 -
Khi không có điều kiện nào ở trên là đúng thì số trường hợp tối đa trở thành (M + N) / 3 + (Bất kỳ nhóm nào còn lại).
Để kiểm tra xem còn nhóm nào không, hãy đặt N =N% 3 và M =M% 3 để lấy các mục còn lại của cả hai loại và sau đó kiểm tra bằng cách sử dụng điều kiện sau -
Nếu (N! =0 &&M! =0 &&(N + M)> =3)
Nếu điều kiện trên là đúng, thì thêm 1 vào kết quả cuối cùng.
-
-
Trong hàm MaxGrp (), sử dụng if kiểm tra điều kiện cho các trường hợp trên
-
Nếu (M> =2 * N) đúng thì trả về M là câu trả lời. Khác Nếu (N> =2 * M) đúng thì trả về N là câu trả lời.
-
Nếu cả hai điều kiện trên đều không đúng, thì hãy kiểm tra xem ((M + N)% 3 ==0). Nếu đúng thì trả về (M + N) / 3 là câu trả lời.
-
Nếu không có điều kiện nào ở trên là đúng thì hãy khởi tạo biến đếm =(M + N) / 3 kiểu int.
Đặt N =N% 3 và M =M% 3 và kiểm tra bất kỳ nhóm nào còn lại bằng cách sử dụng điều kiện đã nêu ở trên trong Trường hợp 4. Nếu điều kiện là đúng thì thêm 1 để đếm và trả về câu trả lời.
Ví dụ
#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; }
Đầu ra
Nếu chúng ta chạy đoạn mã trên, chúng ta sẽ nhận được kết quả sau -
4