C ++中包含两种类型的项目的大小为3的最大组数

给定任务是计算给定N个类型A的项目和M个类型B的项目的数目时可以形成的大小为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)为true,则返回M作为答案。否则,如果(N> = 2 * M)是true,则返回N作为答案。

  • 如果以上两个条件都不成立,则检查是否((M + N)%3 == 0)。如果为真,则返回(M + N)/ 3作为答案。

  • 如果以上条件都不成立,则初始化一个int类型的变量count =(M + N)/ 3。

    放入N = N%3和M = M%3,并在情况4中使用上述条件检查是否有剩余的组。如果条件为真,则加1计数并返回答案。

示例

#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