分糖果c++
时间: 2023-06-29 13:05:29 浏览: 103
以下是一个分糖果的 C++ 代码示例:
```cpp
#include <iostream>
using namespace std;
int main() {
int n, k;
cin >> n >> k; // n 个孩子,k 颗糖果
int candies[n], sum = 0;
for (int i = 0; i < n; i++) {
cin >> candies[i]; // 每个孩子想要的糖果数
sum += candies[i];
}
if (sum < k) { // 糖果不够分
cout << "No" << endl;
return 0;
}
int avg = sum / n; // 平均每个孩子能拿到的糖果数
for (int i = 0; i < n; i++) {
int give = min(avg, candies[i]); // 每个孩子最多只能拿到想要的糖果数
k -= give;
candies[i] -= give;
}
while (k > 0) { // 如果还有剩余糖果,从拥有糖果最少的孩子开始发放
int min_candies = 1000000, min_index = -1;
for (int i = 0; i < n; i++) {
if (candies[i] < min_candies) {
min_candies = candies[i];
min_index = i;
}
}
candies[min_index]++;
k--;
}
cout << "Yes" << endl;
return 0;
}
```
这个程序首先读入 n 个孩子的想要糖果数和糖果总数 k,然后计算出每个孩子平均能拿到的糖果数。接下来,程序从每个孩子想要的糖果数和平均糖果数中取一个较小值,作为该孩子最终能拿到的糖果数,并从总糖果数 k 中减去这个数量。这样一轮下来,所有孩子都至少拿到了平均数的糖果。如果此时糖果还有剩余,程序会把剩余的糖果从拥有糖果最少的孩子开始发放,直到所有糖果都被发放完毕。最后,如果每个孩子都拿到了至少平均数的糖果,程序输出 Yes;否则输出 No。