每日一刷
最近再认真学习递归(奈何还是没理解)所以这道题也是用的递归写法,日常贴题:
通过数据就知道不会boom;这道题最主要的问题就是不能先加上上一个小朋友给的糖的数量之后,再分给下个小朋友。所以就建一个数组存一下上一个小朋友要给的糖就好了,因为是围成一个圈,所以存糖果数量的数组下标可以设为(i+1)%n。然后就很简单,代码如下:
int n,arr[N],num=0,k[N];
void fun(int arr[])
{
int sum=arr[0];
bool flag=true;
for(int i=0;i<n;i++)
{
if(arr[i]!=sum)
flag=false;
}
if(flag)
return;
else
{
for(int i=0;i<n;i++)
{
arr[i]/=2;
k[(i+1)%n]=arr[i];
}
for(int i=0;i<n;i++)
{
arr[i]+=k[i];
if(arr[i]%2!=0)
{
arr[i]++;
num++;
}
}
}
fun(arr);
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
cin>>arr[i];
fun(arr);
cout<<num<<endl;
return 0;
}
事实证明真的没有Boom,提交记录如下: