解题思路:
话不多说,看注释
注意事项:
分糖果时,是同时分。所以刚刚得到的糖果不拿来分
参考代码:
#include<stdio.h>
int main(){
int n,i,a[100];
while(scanf("%d",&n)==1){
int t=0;
for(i=0;i<n;i++)scanf("%d",&a[i]);
while(1){ //当全部人有相同糖果时,跳出
int c=0,k;
for(i=0;i<n-1;i++){ //判断是否全部相等,用c作标记
if(a[i]!=a[i+1]){
c=1;break;
}
}
if(c){
k=0; //暂时记录每个人要分出糖果
for(i=0;i<n-1;i++){
k=(a[i]-k)/2; //计算要分得糖果,减去刚得到的
a[i]-=k; //分去后剩下的
a[i+1]+=k; //下一个小朋友的到后总的糖果
}
k=(a[i]-k)/2; //最后一个小朋友,分给第一个小朋友
a[i]-=k;
a[0]+=k;
for(i=0;i<n;i++){ //一轮过后,基数个糖果的小朋友数量加一
if(a[i]%2==1){
t++; //老师发一个
a[i]+=1;
}
}
}
else{
break;
}
}
printf("%d\n",t);
}}
0.0分
0 人评分