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