每日打卡

分糖问题:

问题描述:某位老师给小孩子们分糖,10个小孩围在一圈,分糖数量如下:10,2,8,22,16,4,10,6,14,20。每个小孩同时将手中糖果的一半分给右边的小孩,分完后糖果为奇数的小孩可以向老师要一个糖果,问几次后每个小孩的糖果相等

问题分析:先通过数学方法进行分析,十个小孩同时给一半的糖果给完后的数量为:15,6,5,15,19,10,11,8,10,17明显数学方法十分困难,而同时的动作,符合循环结构,所以,我们要写出选择奇偶数的程序

伪代码:

输入一个数组a[10,2,8,22,16,4,10,6,14,20]

for(i=1;1<=10;i++)

是偶数分一半,是奇数+1再分一半

分一半给右边的孩子,输出有多少糖果,完成一轮循环

在这之后定义一个函数用来判断每个孩子的糖果数是否相等

不相等继续循环相等退出循环输出结果

代码: #include<stdio.h>

void print(int s[]);

int judge(int c[]);

int j=0;

main()

{

    int sweet[10]={10,2,8,22,16,4,10,6,14,20};

    int i,t[10],l;

    printf("child 1 2 3 4 5 6 7 8 9 10\n");

    printf("time/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

                 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;

    return 0;

}

void print (int s[])

{

    int k;

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

    for(k=0;k<10;k++)

        printf("%4d",s[k]);

    printf("\n");

}

 

posted @ 2023-04-23 20:25  麹义  阅读(32)  评论(0)    收藏  举报