一、问题描述
10个小孩围成一圈分糖果,老师分给第1个小孩10块糖,第2个小孩2块,第3个小孩8块,第4给小孩22块,第5个小孩16块,第6个小孩4块,第7个小孩10块,第8个小孩6块,第9个小孩14块,第10个小孩20块。然后所有的小孩同时将手中的糖分一半给右边的小孩,糖块数为奇数的人可以向老师要一块。问经过几次后大家手中的糖块数一样多,每人各有几块糖。
二、设计思路
根据题意,10个小孩开始的时候拥有的糖果数是不同的,但分糖的动作是相同的,将手中的糖分一半给右边的小孩,糖块数为奇数的人可以向老师要一块。这即是算法的核心。
四、伪代码
while(糖果不同时)
{
将每个孩子的糖果分成一半
for()
将一半糖果分给右边的孩子
for
}
五、代码实现
#include<stdio.h>
void print(int s[]);
int judge(int c[]);
int j=0;
main()
{
int sweet[10]={10,2,8,22,16,4,10,6,14,20};
int i,t[10],l;
printf("child10,2,8,22,16,410,2,8,22,16,4,10,6,14,20,10,6,14,20\n");
printf("-------\n");
printf("time\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");
}
标签:10,小孩,int,sweet,printf,糖果 From: https://www.cnblogs.com/duzhangdan/p/17352330.html