给定任务是计算给定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