【正经题解】分糖果2
2024-03-15 17:49:01
发布于:浙江
16阅读
0回复
0点赞
这个问题的解题思路主要涉及模拟游戏的进行,直到所有小朋友的糖果数相同为止。以下是解题的详细步骤:
判断初始状态是否已经满足题目要求,即所有小朋友的糖果数是否相同。如果是,直接输出 。
如果初始状态不满足要求,进入循环进行模拟游戏的过程。
在每一轮模拟中,从第一个小朋友开始,将当前小朋友的一半糖果分给左手边的小朋友。注意,这里不包括当前这轮新获得的糖果。
对于最后一个小朋友,需要特殊处理,将第一个小朋友分给他的一半糖果。
在每一轮分糖后,检查每个小朋友的糖果数是否为奇数,如果是,则需要老师补发 个糖果,同时将该小朋友的糖果数加 。
重复以上步骤,直到所有小朋友的糖果数相同。
统计老师总共补发的糖果数,输出结果。
#include<bits/stdc++.h>
using namespace std;
int n, s[110];
bool isUniform() {
for (int i = 1; i < n; i++)
if (s[i] != s[i - 1])
return false;
return true;
}
int main() {
cin >> n;
for (int i = 0; i < n; i++)
cin >> s[i];
if (isUniform())
cout << 0 << endl;
else {
int additionalCandies = 0;
while (!isUniform()) {
int w = s[0];
for (int i = 0; i < n - 1; i++) {
s[i] = s[i] + s[i + 1] / 2;
s[i + 1] = s[i + 1] / 2;
}
s[n - 1] += w / 2;
s[0] -= w / 2;
for (int i = 0; i < n; i++)
if (s[i] % 2 == 1) {
additionalCandies++;
s[i] += 1;
}
}
cout << additionalCandies << endl;
}
return 0;
}
这里空空如也
有帮助,赞一个