A 유형의 항목 N개와 B 유형 항목 M개가 주어졌을 때 형성될 수 있는 크기 3의 그룹의 최대 수를 계산하는 작업이 주어졌을 때피>
또한 각 그룹에는 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( M>=2*N )이 참이면 답으로 M을 반환합니다. Else If( N>=2*M )이 참이면 답으로 N을 반환합니다.
-
위의 두 조건이 모두 참이 아니면 if( (M + N)%3 ==0 )을 확인하십시오. 참이면 답으로 (M + N)/3을 반환합니다.
-
위의 조건 중 어느 것도 참이 아닌 경우 int 유형의 변수 count =(M + N)/3을 초기화합니다.
N=N%3 및 M=M%3을 입력하고 Case 4에서 위의 조건을 사용하여 나머지 그룹이 있는지 확인합니다. 조건이 true이면 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