1.杭电1034 Candy Sharing Game
题目大意就是每个同学将自己糖果的一半给右边的同学,当糖果数相同时输出次数和糖果数
注意:
- 先把自己的一半给右边,然后再从左边拿取糖果
- 同学给完后,如果是奇数个,则加1
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
int a[1000],b[1000],n,number=0;//number为次数 数组a和数组b为糖果数的一半
bool equal(){//判断糖果数是否都相同
for(int i=1;i<n;i++){
if(a[i]!=a[i-1])return false;
}
return true;
}
int finish(){//完成一次交换
a[0]+=b[n-1];
for(int i=1;i<n;i++){
a[i]+=b[i-1];
}
for(int i=0;i<n;i++){
if(a[i]%2!=0){
a[i]++;
}
b[i]=a[i]/2;
a[i]=b[i];
}
number++;
return number;
}
int main()
{
while(cin>>n&&n!=0){
for(int i=0;i<n;i++){
cin>>a[i];
b[i]=a[i]/2;
a[i]=b[i];
}
memset(a,n,0);
memset(b,n,0);
while(!equal()) finish();//如果糖果未相同 则进行一次交换
cout<<number<<" "<<a[0]*2<<endl;
number=0;
}
return 0;
}