C语言编程怎么解决分糖问题

Python026

C语言编程怎么解决分糖问题,第1张

糖果问题

幼儿园有n(<20)个孩子围成一圈分糖果,老师先随机地发给每个孩子若干颗糖果,然后按以下规则调整:每个孩子同时将自己手中的糖果分一半给坐在他右边的小朋友;如共有8个孩子,则第1个将原来的一半分给第2个,第2个将原有的一半分给第3个……第8个将原来的一半分给第1个,这样的平分动作同时进行;若平分前,某个孩子手中的糖果是奇数颗,则必须从老师那里要一颗,使他的糖果变成偶数。小孩人数和每个

小孩的初始数由键盘输入。经过多少次调整,使每个孩子手中的糖果一样多,调整结束时每个孩子有糖果多少颗,在调整过程中老师又新增发了多少颗糖果。

#include <stdio.h>

#define N 20

int n

int equal(int [])

int main()

{

    int num=0,count=0,i,t1,t2

    int child[N]

    printf("请输入小孩数:")

    scanf("%d",&n)

    printf("请输入每个小孩手中的原始糖数:")

    for(i=0i<ni++)

        scanf("%d",&child[i])

    while(!equal(child))

    {

        for(i=0i<ni++)

        {

            if(child[i]%2!=0)

            {

                child[i]+=1

                num+=1

            }

        }

        t1=child[0]

        for(i=0i<ni++)

        {

            t2=child[(i+1)%n]

            child[(i+1)%n]/=2

            child[(i+1)%n]+=t1/2

            t1=t2

        }

        count+=1

        for(i=0i<ni++)

            printf("%d ",child[i])

        printf("\n")

    }

    printf("经过%d次交换后糖数相等,糖数是%d颗\n调整过程中新发%d颗糖\n\n",count,child[1],num)

    return 0

}

int equal(int child[])

{

    int i

    for(i=1i<ni++)

        if(child[i]!=child[i-1])

            return 0

    return 1

}

运行结果

#include <stdio.h>

#include <string.h>

int main(void)

{

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

int i, j

int b[10]

do

{

for (i = 0 i < 10 ++i)

{

// 这里是a[i]

if (a[i] % 2)

a[i] = a[i] + 1

}                           

for (i = 0 i < 10 ++i)

{

a[i] = a[i] / 2

}                         

b[0] = a[0] + a[9]

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

{

b[i] = a[i] + a[i - 1]

}

// i只能到9

for (i = 0 i < 9 ++i)

{

if (b[i] != b[i + 1])

break

}                       

j = i

// 把b数组的内容转移到a数组

memcpy(a, b, sizeof(a))

} while (j != 9)

for (i = 0 i < 10 ++i)

{

printf("  %d", b[i])

}

return 0

}