c语言20人分糖果,C语言实例 10个小孩分糖果

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

*问题分析与算法设计

题目描述的分糖过程是一个机械的重复过程,编程算法完全可以按照描述的过程进行模拟。

*程序说明与注释

#include

void print(int s[]);

int judge(int c[]);

int j=0;

int 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");

print(sweet); /*输出每个人手中糖的块数*/

while(judge(sweet)) /*若不满足要求则继续进行循环*/

{

for(i=0;i<10;i++) /*将每个人手中的糖分成一半*/

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<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; /*不相同返回 1*/

return 0;

}

void print(int s[]) /*输出数组中每个元素的值*/

{

int k;

printf(" %2d ",j++);

for(k=0;k<10;k++) printf("%4d",s[k]);

printf("\n");

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值