C趣味程序百例(24)10个小孩分糖果
75.十个孩子分糖果
十个孩子围成一圈,分糖果。老师把第一个孩子分成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 ");
打印(甜);/*输出每个人手里的糖块数*/
while(判断(甜))/*如果不符合要求,继续循环*/
{
for(I = 0;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 sweet[l+1]= sweet[l+1]+t[l];
sweet[0]+= t[9];
打印(甜);/*输出当前每个孩子手中的糖量*/
}
int judge(int c[])
{
int I;
for(I = 0;i if(c[0]!=c[i])返回1;/*不同返回1*/
返回0;
}
void print(int s[])/*输出数组中每个元素的值*/
{
int k;
printf(" %2d ",j++);
for(k = 0;k printf(" \ n ");
}
0条评论