Candy Sharing Game

Candy Sharing Game

http://www.nowcoder.com/questionTerminal/33adf53e095440b2823a39146a285b77

题意:n个学生坐成一个圆圈,每人初始有一些糖果。老师吹一次口哨,每个学生同时把ta的一半糖果给右边的学生。结束时如果有学生糖果为奇数,则补一颗。当所有学生都有相同数量的糖果时,游戏结束。模拟游戏,确定老师吹口哨的次数,和最终学生的糖果数。

输入:每一组数据先输入n,接下来的n行表示逆时针方向每个学生初始的糖果数目。

输出:两个整数,以空格隔开,分别代表老师吹口哨的次数和最终每个学生的糖果数。

#include<stdio.h>
int n;
int whistle; // 吹口哨的次数
int candy[50];
int judge() // 判断每个孩子的糖果是否一样
{
    for(int i =0;i<n-1;i++)
    {
        if(candy[i] != candy[i+1])
            return 0;
    }
    return 1;
}
void function()
{
    whistle = 0;
    int lost[n],get[n]; // 分别代表每一个孩子给出去的糖果和得到的糖果
    while(1)
    {
        if (judge()) // 每个孩子的糖果都一样
        {
            printf("%d %d\n", whistle, candy[0]);
            return;
        }
        else // 进行一轮游戏
        {
            for(int i = 0;i<n;i++) // 对每一个孩子更新其lost和get数组
            {
                int left =  (i+1)%n;// 获得左手边的邻居的糖果
                lost[i] = candy[i] /2;
                get[i] = candy[left] / 2;
            }
            for(int i = 0;i<n;i++)// 进行糖果的传递
                candy[i] = candy[i] -lost[i] + get[i];
            for(int i = 0;i<n;i++)// 给拿到奇数糖果的孩子补一糖果
            {
                if(candy[i] %2 )
                    candy[i]++;
            }
            whistle ++;
        }
    }
}
int main()
{
    int i;
    while(scanf("%d",&n) != EOF && n)
    {
        i = 0;
        scanf("%d",&candy[i]); // 逆时针获取糖果
        for(i = (i-1+n)%n;i!=0;i=(i-1+n)%n)
            scanf("%d",&candy[i]);
        function();
    }
    return 0;
}
全部评论

相关推荐

牛客969571862号:昨天捞我今天面这个,岗位一模一样,感觉就是面着玩
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务