Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 두 가지 유형의 항목을 포함하는 크기 3의 최대 그룹 수


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