蓝桥试题 历届试题 分糖果

每日一刷
最近再认真学习递归(奈何还是没理解)所以这道题也是用的递归写法,日常贴题:
在这里插入图片描述通过数据就知道不会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,提交记录如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值