解题思路:
问题描述
有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:
每个小朋友都把自己的糖果分一半给左手边的孩子。
一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。
反复进行这个游戏,直到所有小朋友的糖果数都相同为止。
你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。
1.建立数组,读入数据。
2.判断是否全部相等,全部相等则结束。
3.全部数据除以2.(奇数+1再除以2)
4.从尾向前依次 += 前一个数。完成后返回第二步.
注意事项:
第四步中,第一个数应加上第三步结束后的最后一个数,可以单独处理。
参考代码:
#include <stdio.h> int main() { int i,n,kid[100]; int num=0;//num为老师补发数 int temp;//暂存变量 //读入数据 scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&kid[i]); //全部相等才能跳出 while(1) { //判断相等 for(i=1;i<n;i++) if(kid[0]!=kid[i]) break; if(i==n) break; //奇数 +1,全部除以2 for(i=0;i<n;i++) { if(kid[i]%2==1) { kid[i]++; num++; } kid[i]/=2; } //相加 temp=kid[n-1]; for(i=n-1;i>0;i--) kid[i]+=kid[i-1]; kid[0]+=temp; } printf("%d",num); return 0; }
0.0分
11 人评分
钟神赛车 (C++代码)浏览:905 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:643 |
C语言训练-计算1977!* (C++代码)浏览:907 |
简单的a+b (C++语言代码)浏览:895 |
不会做的浏览:954 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:570 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:468 |
C语言训练-亲密数 (C语言代码)浏览:697 |
【亲和数】 (C语言代码)浏览:628 |
循环入门练习6 (C语言代码)浏览:1058 |