C趣味程序百例(24)10个小孩分糖果

文章作者 100test 发表时间 2007:03:10 17:29:49
来源 100Test.Com百考试题网


75.10个小孩分糖果
十个小孩围成一圈分糖果,老师分给第一个小孩10块,第二个小孩2块,第三个小孩8块,第四个小孩22块,第五个小孩16块,第六个小孩4块,第七个小孩10块,第八个小孩6块,第九个小孩14块,第十个小孩20块。然后所有的小孩同时将手中的糖分一半给右边的小孩;糖块数为奇数的人可向老师要一块。问经过这样几次后大家手中的糖的块数一样多?每人各有多少块糖?
*问题分析与算法设计
题目描述的分糖过程是一个机械的重复过程,编程算法完全可以按照描述的过程进行模拟。
*程序与程序注释
#include
void print(int s[]).
int judge(int c[]).
int j=0.
void main()
{
static int sweet[10]={10,2,8,22,16,4,10,6,14,20}. /*初始化数组数据*/
int i,t[10],l.
printf(" child\n").
printf(" round 1 2 3 4 5 6 7 8 9 10\n").
printf(".............................\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 /*若为奇数则加1后再分出一半*/
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. /*不相同返回 1*/
return 0.
}
void print(int s[]) /*输出数组中每个元素的值*/
{
int k.
printf(" - ",j ).
for(k=0.k<10.k ) printf("M",s[k]).
printf("\n").
}

*运行结果




相关文章


经典C程序100例==11--20
C趣味程序百例(25)波松瓦酒的分酒趣题
C趣味程序百例(24)10个小孩分糖果
C趣味程序百例(24)小明买书
C趣味程序百例(24)可称1~40磅的4块砝码
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛