您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> C语言 >> 辅导 >> 正文    
  C趣味程序百例(24)10个小孩分糖果 【注册男护士专用博客】          

C趣味程序百例(24)10个小孩分糖果

www.nanhushi.com     佚名   不详 

75.10个小孩分糖果
    十个小孩围成一圈分糖果,老师分给第一个小孩10块,第二个小孩2块,第三个小孩8块,第四个小孩22块,第五个小孩16块,第六个小孩4块,第七个小孩10块,第八个小孩6块,第九个小孩14块,第十个小孩20块。然后所有的小孩同时将手中的糖分一半给右边的小孩;糖块数为奇数的人可向老师要一块。问经过这样几次后大家手中的糖的块数一样多?每人各有多少块糖?
*问题分析与算法设计
    题目描述的分糖过程是一个机械的重复过程,编程算法完全可以按照描述的过程进行模拟。
*程序与程序注释
#include<stdio.h>
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");
    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");
}

*运行结果

   

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目