/****************************************
* File Name : figure.c
* Creat Data : 2015.1.29
* Author : ZY
*****************************************/
/*数的变幻*/
/*十个小孩分糖果*/
/*是个小孩围成一圈分糖果,老师分给第一个小孩10块,第二个小孩2块,第三个小孩8块,
第四个小孩22块,第五个小孩16块,第六个小孩4块,第七个小孩10块,第八个小孩6块,
第九个小孩14块,第十个小孩20块。然后所有的小孩同时将自己手中的糖的一半给右边的
小孩,糖块数为奇数的人可向老师要一块,问经过这样的几次调整后大家手里的糖的块数都一样?
每人各有多少块糖?*/
#include
int j = 0;
int judge(int c[])
{
int i;
for(i = 0;i < 10;i++)//判断每个孩子手中的糖是否相同
{
if(c[0]!=c[i])//不相同返回1
{
return 1;
}
}
return 0;//全相同返回0
}
int print(int s[])//输出数组中每个元素的值
{
int k;
printf(" %2d",j++);
for(k = 0;k < 10;k++)
{
printf("%4d",s[k]);
}
printf("\n");
}
int main(void)
{
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(0 == sweet[i]%2)
{
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);//输出当前手中的糖数
}
return 0;
}