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