解题思路:
把围成一个圈的孩子,拆成一条直线,用数组储存,所以第一个孩子分完糖果又接受第二个孩子的一半糖果,本质上为本质就是失去一半糖果,
加上后一个人的一半糖果,当到最后一个人的时候,接收自己一半 糖果和第一个人 的一半糖果,
注意事项:
要明白每一个数的作用。
参考代码:
int num[100] = {0}; //初始化一个数组
int n = 0;//n为人数
cin >> n;
int x; //x为输入的分发糖果数
int sum = 0; //用来记录老师多发的糖果数
for (int i = 0; i < n; i++) {
cin >> x;
num[i] = x;
}
int temp = 0 ; //后面用来记录num[0]
int w = n;
while (w) {
for (int i = 0; i < n; i++)//此步用来判断每个数组是否为偶数,不是的话加一,sum加一
{
if (!(num[i] % 2 == 0))
{
num[i] = num[i] + 1;
sum++;
}
}
temp = num[0]; //记录num[0]的值
int h = num[0];
for (int i = 0; i < n; i++) { //计算分完一次各自的糖果数,本质就是失去一半糖果,
// 加上后一个人的一半糖果,当到最后一个人的时候,接收自己一半 if (i < n - 1) num[i] = (num[i] + num[i + 1]) / 2; // 糖果和第一个人 的一半糖果,用temp记录的那个
else { num[i] = (num[i] + temp)/2; }
if (h == num[i]) { w--; } //记录是否都相等,当每个人糖果相等,w为0
}
if (!w == 0) { w = n; } //不为0便重来,为0结束循环
}
cout << sum << endl; //得出结果
return 0;
}
0.0分
1 人评分