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]++;
}