
一道c语言程序设计题,请懂的人帮忙!!
分糖果10个小孩围成一圈分糖果,老师分给第一个小孩10块,第二个小孩2块,第三个小孩8块,第四个小孩22块,第五个小孩16块,第六个小孩4块,第七个小孩10块,第八个小孩...
分糖果
10个小孩围成一圈分糖果,老师分给第一个小孩10块,第二个小孩2块,第三个小孩8块,第四个小孩22块,第五个小孩16块,第六个小孩4块,第七个小孩10块,第八个小孩6块,第九个小孩14块,第十个小孩20块。然后所有的小孩同时将手中的糖分一半给右边的小孩;糖块为奇数的人可向老师要一块。问经过这样几次后,大家手中的糖的块数将一样多?每人各有多少块糖?
PS:一定用循环语句么,请高手指点,谢!.... 展开
10个小孩围成一圈分糖果,老师分给第一个小孩10块,第二个小孩2块,第三个小孩8块,第四个小孩22块,第五个小孩16块,第六个小孩4块,第七个小孩10块,第八个小孩6块,第九个小孩14块,第十个小孩20块。然后所有的小孩同时将手中的糖分一半给右边的小孩;糖块为奇数的人可向老师要一块。问经过这样几次后,大家手中的糖的块数将一样多?每人各有多少块糖?
PS:一定用循环语句么,请高手指点,谢!.... 展开
2个回答
展开全部
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;
}
按找您的每次分的结果为:
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;
}
展开全部
楼上的说得没错.的确是第四次错了.我没有判断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块糖.
--------------------------
#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块糖.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询