错过的题:
有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:
每个小朋友都把自己的糖果分一半给左手边的孩子。
一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。
反复进行这个游戏,直到所有小朋友的糖果数都相同为止。
你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。
代码:
#include <stdio.h>
#define MAX 101
int main(){
int n, ans = 0, temp, candy[MAX];;
scanf("%d", &n);
for(int i = 0; i < n; i++){
scanf("%d", &candy[i]);
}
while(1){
//判断是否全部相等
int x = 0;
for(int i = 1; i < n; i++){
if(candy[0] != candy[i]){
x++;
}
}
if(x == 0){
break;
}
//所有元素减半
for(int i = 0; i < n; i++){
candy[i] /= 2;
}
//向左边分一半糖果
temp = candy[n - 1];
for(int i = n - 1; i > 0; i--){
candy[i] += candy[i - 1];
}
candy[0] += temp;
//计算补发多少糖果
for(int i = 0; i < n; i++){
if(candy[i] % 2 != 0){
candy[i] += 1;
ans++;
}
}
}
printf("%d", ans);
}
原因:int x = 0定义在while里每次循环都会给x赋值为0,但定义在外面只会赋值一次