一问题描述

十个小孩儿围成一圈分糖果,老师分给第一个小孩十块,第二个小孩二两块,第三个小孩八块,第四个小孩儿22块,第五个小孩儿16块儿,第六个小孩儿四块,第七个小孩儿十块,第八个小孩儿六块儿,第九个小孩14块,第十个小孩20块。然后所有的小孩同时将手中的糖分一半给右边的小孩,糖块儿数为奇数的人可以向老师要一块儿。问,经过这样几次后,大家手中的糖块儿数一样多吗?每人各有多少块汤?

二设计思路

通过循环将各个人所拥有的糖数求出一半然后再将其赋值给另一个数组保存,然后替换原数组的值通过循环相加,while循环控制几次;

三程序流程图

四伪代码实现

#include<stdio.h>
void print(int s[]);
int judge(int c[]);
int j=0;
int main(){
int sweet[10]={10,2,8,22,16,4,10,6,14,20};
int i,t[10],l;
printf("child 1 2 3 4 5 6 7 8 9 10\n");
print(sweet);
while(judge(sweet)){
for(i=0;i<10;i++)
if(sweet[i]%2==0)
t[i]=sweet[i]=sweet[i]/2;
else
t[i]=sweet[i]=(sweet[i]+1)/2;
for(l=0;l<9;l++)
sweet[l+1]=sweet[l+1]+t[l];
sweet[0]+=t[9];
print(sweet);
}
}
int judge(int c[]){
int i;
for(i=0;i<10;i++)
if(c[0]!=c[i])
return 1;
return 0;
}
void print(int s[]){
int k;
printf(" %2d",j++);
for(k=0;k<10;k++)
printf("%4d",s[k]);
printf("\n");
}

五代码实现