HDOJ HDU 1034 Candy Sharing Game

HDOJ 1034 Candy Sharing Game

题目

点此查看 HDOJ 1034 Candy Sharing Game

分类

模拟

题意

糖果分享游戏
规则如下
- 初始时 每个人都有一堆糖果 并 成圈站着
- 听到指令 同时 将一半的糖果给下一个人
- 每轮完成时 手中糖数 为 奇数时 会得到一颗糖
- 重复以上两步骤 直到 所有人 的 糖数一致
求游戏要进行多少轮 最终每人的糖数

题解

按题意模拟即可

技巧

这个题的难点在于 同时 将一半的糖果给下一个人
模拟时 将 最后一个人先减半 标记 之后 从第一个模拟 当前同学糖果数 简版记录 再加上 上一个的糖果数记录 即可

代码

#include <iostream>
#define max 1000

using namespace std;

int cir[max];

bool isequal(int n);
int add(int n);

int main()
{
    int n,t,lst,nxt;
    while(cin >> n && n)
    {
        t = 0;
        for(int i = 0;i < n;i++)
        {
            cin >> cir[i];
        }
        while(!isequal(n))
        {
            t++;
//            cout << t << endl;
//            for(int j = 0;j <n;j++)
//                cin.get();
            cir[n-1] /= 2;
            lst = cir[n-1];
            for(int i = 0;i < n-1;i++)
            {
                cir[i] /= 2;
                nxt = cir[i];
                cir[i] += lst;
                lst = nxt;
            }
            cir[n-1] += lst; 
            add(n);
        }
        cout << t << " " << cir[0] << endl;
    }
    return 0;
}

bool isequal(int n)
{
    int f = cir[0];
    for(int i = 1;i < n;i++)
        if(f != cir[i])
            return false;
    return true;
}

int add(int n)
{
    for(int i = 0;i < n;i++)
        if(cir[i] % 2 == 1)
            cir[i]++;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值