一道c语言程序设计题,请懂的人帮忙!!

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

PS:一定用循环语句么,请高手指点,谢!....
展开
 我来答
百度网友686acfc
2007-07-03
知道答主
回答量:25
采纳率:0%
帮助的人:25.3万
展开全部
tg_scorpio在您第四次分的时候,就出错了。
按找您的每次分的结果为:
6,5,15,19,10,7,8,10,17,15,
6,11,18,15,9,8,9,14,17,11,
9,15,17,13,9,9,12,16,15,9,
12,17,16,12,10,11,14,16,13,10,
15,17,14,11,11,13,15,15,12,11,
16,16,13,12,13,15,16,14,12,14,
16,15,13,13,15,16,15,13,13,15,
16,15,14,15,16,16,15,14,15,16,
16,15,15,16,16,16,15,15,16,16,
16,16,16,16,16,16,16,16,16,16,
经过11次后,大家手上都有16块糖.

我按照你的分发顺序,计算的结果为:
6,5,15,19,10,7,8,10,17,15,
6,11,18,15,9,8,9,14,17,11,
9,15,17,13,9,9,12,16,15,9,
13,17,16,12,10,11,14,16,13,10,
16,17,14,11,11,13,15,15,12,12,
17,16,13,12,13,15,16,14,12,14,
17,15,13,13,15,16,15,13,13,16,
17,15,14,15,16,16,15,14,15,17,
17,15,15,16,16,16,15,15,17,18,
17,16,16,16,16,16,16,17,18,18,
17,16,16,16,16,16,17,18,18,18,
17,16,16,16,16,17,18,18,18,18,
17,16,16,16,17,18,18,18,18,18,
17,16,16,17,18,18,18,18,18,18,
17,16,17,18,18,18,18,18,18,18,
17,17,18,18,18,18,18,18,18,18,
18,18,18,18,18,18,18,18,18,18,

after 17 times,everyone hav 18 candies!

这题应该考虑两种情况,即老师的发糖顺序有两种,所以答案应该有两组:
15,6,5,15,19,10,7,8,10,17,
17,11,6,11,18,15,9,8,9,14,
16,15,9,9,15,17,13,9,9,12,
14,16,13,10,13,17,16,12,10,11,
13,15,15,12,12,16,17,14,11,11,
13,15,16,14,12,14,17,16,13,12,
13,15,16,15,13,13,16,17,15,13,
14,15,16,16,15,14,15,17,17,15,
15,15,16,16,16,15,15,17,18,17,
17,16,16,16,16,16,16,17,18,18,
18,17,16,16,16,16,16,17,18,18,
18,18,17,16,16,16,16,17,18,18,
18,18,18,17,16,16,16,17,18,18,
18,18,18,18,17,16,16,17,18,18,
18,18,18,18,18,17,16,17,18,18,
18,18,18,18,18,18,17,17,18,18,
18,18,18,18,18,18,18,18,18,18,

after 17 times,everyone hav 18 candies!
6,5,15,19,10,7,8,10,17,15,
6,11,18,15,9,8,9,14,17,11,
9,15,17,13,9,9,12,16,15,9,
13,17,16,12,10,11,14,16,13,10,
16,17,14,11,11,13,15,15,12,12,
17,16,13,12,13,15,16,14,12,14,
17,15,13,13,15,16,15,13,13,16,
17,15,14,15,16,16,15,14,15,17,
17,15,15,16,16,16,15,15,17,18,
17,16,16,16,16,16,16,17,18,18,
17,16,16,16,16,16,17,18,18,18,
17,16,16,16,16,17,18,18,18,18,
17,16,16,16,17,18,18,18,18,18,
17,16,16,17,18,18,18,18,18,18,
17,16,17,18,18,18,18,18,18,18,
17,17,18,18,18,18,18,18,18,18,
18,18,18,18,18,18,18,18,18,18,

after 34 times,everyone hav 18 candies!

源代码如下:

int main()
{
#define BABE_COUNT 10//babe人数
int next_babe;//下一个babe手里的糖果总数
int current_babe;
int loop_count=0;
int ok_flag;
int next_babe_order;
int babe[BABE_COUNT];//每个babe手里的糖果数

//方向一
babe[0]=10;
babe[1]=2;
babe[2]=8;
babe[3]=22;
babe[4]=16;
babe[5]=4;
babe[6]=10;
babe[7]=6;
babe[8]=14;
babe[9]=20;
do{
//开始分糖
if(babe[0]%2==1)
babe[0]++;
next_babe=babe[0];
for (int i=0; i<BABE_COUNT; i++){
next_babe_order=(i+1) % BABE_COUNT;
if ( babe[ next_babe_order ] % 2 == 1 )//下一个babe不够偶数,则问老师要一个
babe[ next_babe_order ]++;
current_babe=next_babe;
next_babe=babe[ next_babe_order ];//得到下一个babe传递前的个数
babe[ next_babe_order ]=current_babe/2+next_babe/2;//得到下一个babe传递后的个数
}
loop_count++;

//显示本次分发结果
for ( int kk=0;kk<10;kk++)
printf("%d,",babe[kk]);
printf("\n");

//判断是否都相等
ok_flag=1;
for (int i=1; i<BABE_COUNT; i++){
if(babe[0]!=babe[i]){
ok_flag=0;
break;
}
}
if(ok_flag==1)break;

}
while(1);

//显示结果
printf("\nafter %d times,everyone hav %d candies!\n",loop_count,babe[0]);

//方向二
babe[0]=10;
babe[1]=2;
babe[2]=8;
babe[3]=22;
babe[4]=16;
babe[5]=4;
babe[6]=10;
babe[7]=6;
babe[8]=14;
babe[9]=20;
do{
//开始分糖
if(babe[BABE_COUNT-1]%2==1)
babe[BABE_COUNT-1]++;
next_babe=babe[BABE_COUNT-1];
for (int i=BABE_COUNT-1; i>=0; i--){
if(i==0)
next_babe_order=9;
else
next_babe_order=(i-1);
if ( babe[ next_babe_order ] % 2 == 1 )//下一个babe不够偶数,则问老师要一个
babe[ next_babe_order ]++;
current_babe=next_babe;
next_babe=babe[ next_babe_order ];//得到下一个babe传递前的个数
babe[ next_babe_order ]=current_babe/2+next_babe/2;//得到下一个babe传递后的个数
}
loop_count++;

//显示本次分发结果
for ( int kk=0;kk<10;kk++)
printf("%d,",babe[kk]);
printf("\n");

//判断是否都相等
ok_flag=1;
for (int i=1; i<BABE_COUNT; i++){
if(babe[0]!=babe[i]){
ok_flag=0;
break;
}
}
if(ok_flag==1)break;

}
while(1);

//显示结果
printf("\nafter %d times,everyone hav %d candies!\n",loop_count,babe[0]);

return 0;
}
tg_scorpio
2007-07-03 · TA获得超过414个赞
知道小有建树答主
回答量:195
采纳率:100%
帮助的人:0
展开全部
楼上的说得没错.的确是第四次错了.我没有判断child[0]为奇数的情况.而且楼上这位同学考虑更周全.
--------------------------
#include<stdio.h>

int equal(int child[])//判断每个小孩手上的糖是否相等
{
int i;
for(i=1;i<10;i++)
if(child[i]!=child[i-1])
return 1;
return 0;
}

void main()
{
int child[10]={10,2,8,22,16,4,10,6,14,20};
int i, tmp0, tmp, sum=0, count=0;
while(equal(child)) {
if(child[0]%2)//这里要加一判断才行
child[0]++;
tmp0= child[0];
for(i=1;i<10;i++) {//循环分糖
if(child[i]%2)
child[i]++;
tmp = child[i];
child[i-1]=child[i-1]/2+tmp/2;//分糖后
}
if(tmp0%2)
tmp0++;
child[9]=child[9]/2+tmp0/2;
count++;
}
printf("经过%d次后,大家手上都有%d块糖.\n", count, child[0]);
}

-------------------------
结果:
经过17次后,大家手上都有18块糖.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式