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
广告