您的位置:首页 > 其它

ZOJ 1814/HDU 1034/POJ 1666 Candy Sharing Game

2015-01-23 19:01 417 查看
题目链接:

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1814

http://acm.hdu.edu.cn/showproblem.php?pid=1034

http://poj.org/problem?id=1666

题意:

 题目说的是一个分糖果的游戏,n个学生围成一圈,每个人手上有a[i]个糖果,每一轮游戏开始时,学生手中的糖果都是偶数,他们都把自己手中一半的糖果分给他右边的同学。分完后手中糖果数是奇数的,老师会给他一颗糖果。如果所有人手中的糖果数都一样 游戏结束。

    输出总共进行了多少轮游戏 还有最后学生手中的糖果数。
注意:给别人糖果的一半不包括老师给的那颗凑偶数的,,,,就这么把我卡了好久。。
代码:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int a[105];
int n;
while(scanf("%d",&n) && n!=0)
{
int count=0;
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
int maxx,minn;
maxx=minn=a[0];
for(int i=1;i<n;i++)
{
maxx=max(maxx,a[i]);
minn=min(minn,a[i]);
}
if(maxx==minn)
printf("0 %d\n",maxx);
else
{

cc:
int t=a[0]/2;
for(int i=1;i<n;i++)
{
int p=a[i]/2;
a[i]=a[i]/2+t;
t=p;
if(a[i]%2)
a[i]++;
}
a[0]=a[0]/2+t;
if(a[0]%2)
a[0]++;
count++;
for(int j=1;j<n;j++)
if(a[0]!=a[j])
goto cc;
printf("%d %d\n",count,a[0]);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  模拟