一、问题描述:
10个小孩围成- -圈分糖果, 老师分给第1个小孩10块,第2个小孩2块,第3个小孩8块,第4个小孩22块,第5个小孩16块,第6个小孩4块,第7个小孩10块,第8个小孩6块,第9个小孩14块,第10个小孩20块。然后所有的小孩同时将手中的糖分一半给右边的小孩:糖块数为奇数的人可向老师要一块。问经过这样几次后大家手中的糖块数一样多吗?每人各有多少块糖?
二、设计思路:
题目有十个小孩,可以定义十个小孩的数组,然后思考循环的条件是什么,当每个孩子糖果数不相同时,就一直循环下去,所以我们可以采用while循环,题目又说每个小孩同时分一半给右边小孩,偶数还可以分,奇数则需要加1再分糖,这里我们还需要再建立一个数组来存储分一半后的数量,还有就是数组a[9]如何分一半给a[0]建立起一个圆圈般的循环然后就是判断循环是否继续的函数while(judge(a))此时函数的返回值决定。
三、程序流程图:
四、代码实现:
#include<stdio.h> #define N 10 void print(int s[]); int judge(int c[]); int j=0; int main() { int a[N]={10,2,8,22,16,4,10,6,14,20}; int b[10]; int i,n; print(a);//输出没分之前每个孩子的糖果数量 while(judge(a)) { for(i=0;i<10;i++) { if(a[i]%2==0) b[i]=a[i]=a[i]/2;//偶数则之间分一半出去 else b[i]=a[i]=(a[i]+1)/2;//奇数则加1后再分一半出去 } for(n=0;n<9;n++) { a[n+1]=a[n+1]+b[n]; } a[0]+=b[9]; print(a);//输出当前每个孩子的糖果数 } return 0; } int judge(int c[]) { int i; for(i=0;i<10;i++) { if(c[0]!=c[i]) return 1;//不相同返回1 } return 0;//相同返回0 } void print(int s[]) { int k; printf("%d",j++); for(k=0;k<10;k++) printf("%4d",s[k]); printf("\n"); }
说实话,这道题我写的时候没跑出来,天宇巨佬过来一看,
a[0]+=b[9]标签:10,小孩,int,循环,judge,糖果 From: https://www.cnblogs.com/bzsc/p/17360045.html
这个玩意我写进了for循环里面了,难受的捏,比五一,一个人过还难受