分糖果

分糖果:

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

解题思路:将10个小孩的糖果数放在数组sweet中,条件判断如果每个人的糖果数不一样则利用循环计算每个人要给右边人的糖果数(偶数直接除2,奇数加1后除2)储存在数组a中,同时把a中的值赋给sweet,利用for循环计算每个人分完后的糖果数,后次数加一;如果一样则输出次数以及每人的糖果数。条件可以用函数来判断糖果数是否相等,相等则返回1,不相等则返回0。

代码:

#include<iostream>

#include<iomanip>

using namespace std;

int pan(int sweet[10])

{

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

    {

        if(sweet[0]!=sweet[i])

            return 0;

    }

    return 1;

}

void chu(int sweet[10],int n)

{

    cout<<setw(2)<<n;

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

    {

        cout<<setw(4)<<sweet[i];

    }

    cout<<endl;

}

int main()

{

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

    int a[10];

    int i,n=0;

    cout<<"child  1   2   3   4   5   6   7   8   9   10"<<endl;

    cout<<"..................................................."<<endl;

    cout<<"time"<<endl;

    while(!pan(sweet))

    {

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

        {

            if(sweet[i]%2==0)

                a[i]=sweet[i]=sweet[i]/2;

            else

                a[i]=sweet[i]=(sweet[i]+1)/2;

        }

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

        {

            sweet[i+1]=sweet[i+1]+a[i];

        }

        sweet[0]=sweet[0]+a[9];

        n++;

        chu(sweet,n);

    }

 

    return 0;

}

本题体会:利用函数来简化主函数中的内容

 

posted @ 2023-04-18 18:32  不如喝点  阅读(120)  评论(0)    收藏  举报