视频:2014年C++C组题8(JavaA组题8)分糖果_哔哩哔哩_bilibili
这道题我们就按照自身减去一半,再从右手边拿来右手边的一半。尾部的那一个需要特殊处理,它的右手边实际上就是数字的第一个数,这是一个环。
#include<iostream>
using namespace std;
const int N=100;
int a[N];
int ans;
int n;
bool check()
{
int t=a[0];
for(int i=1;i<n;++i)
{
if(a[i]!=t)return false;
}
return true;
}
int main()
{
cin>>n;
for(int i=0;i<n;++i)
{
scanf("%d",&a[i]);
}
while(1) //多轮
{
//一轮的处理逻辑
int t=a[0];
for(int i=0;i<=n-2;i++)
{
a[i]-=a[i]/2;
a[i]+=a[i+1]/2;
if((a[i]&1)==1)
{
ans++;
a[i]++;
}
}
a[n-1]-=a[n-1]/2;
a[n-1]+=t/2;
if((a[n-1]&1)==1)
{
ans++;
a[n-1]++;
}
if(check())
{
cout<<ans<<endl;
return 0;
}
}
return 0;
}