C++程序中无重复地分配所有球
在本教程中,我们将学习如何将n个球分配给k个学生,而不会让任何人吃亏。
这个想法很简单,我们有n个不同颜色的球需要分配给学生。我们不能给任何学生超过一个相同颜色的球。如果允许学生获得多个相同颜色的球,则不应进行分配。
让我们来看一个例子。
输入
n = 10 k = 5 ballsColors = "rrrgbrbgbr"
输出
Yes
没有一种颜色的球的数量超过学生人数 (k)。因此,没有学生会得到超过一个相同颜色的球。
让我们看看解决问题的步骤。
初始化n、k和球的颜色。
初始化一个map来存储球的颜色计数。
迭代球的颜色并找到每种球颜色的数量。
现在,遍历每种球的数量。
如果任何球的颜色数量大于学生人数,则无法分配。
否则我们可以分配球。
打印结果。
示例
让我们看看代码。
#include <bits/stdc++.h> using namespace std; bool canDistributeBalls(string ballsColors, int n, int k) { map<char, int> charCount; for (int i = 0; i < n; i++) { charCount[ballsColors[i]]++; } map<char , int >::iterator itr; for(itr = charCount.begin(); itr != charCount.end(); itr++) { if (itr->second > k) { return false; } } return true; } int main() { int n = 10, k = 5; string ballsColors = "rrrgbrbgbr"; if (canDistributeBalls(ballsColors, n, k)) { cout << "Yes" << endl; } else { cout << "No" << endl; } return 0; }
输出
如果运行以上程序,则会得到以下结果。
Yes
结论
如果您在本教程中有任何疑问,请在评论区提出。
广告