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

结论

如果您在本教程中有任何疑问,请在评论区提出。

更新于:2021年1月27日

183 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告