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条件检查上述情况

  • 如果If( M>=2*N )为真,则返回M作为答案。否则If( N>=2*M )为真,则返回N作为答案。

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

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

    设置N=N%3和M=M%3,并使用情况4中上述规定的条件检查是否有任何剩余组。如果条件为真,则将1加到count并返回答案。

示例

 实时演示

#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

更新于: 2020年8月17日

144 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告