【蓝桥杯】【熊怪吃核桃】

 

熊怪吃核桃
森林里有一只熊怪,很爱吃核桃。不过它有个习惯,每次都把找到的核桃分成相等的两份,吃掉一份,留一份。
如果不能等分,熊怪就会扔掉一个核桃再分。第二天再继续这个过程,直到最后剩一个核桃了,直接丢掉。
有一天,熊怪发现了1543个核桃,请问,它在吃这些核桃的过程中,一共要丢掉多少个核桃。

 

请填写该数字(一个整数),不要填写任何多余的内容或说明文字。

 

分析】这道题其实就是需要我们去写一个递归方法来模拟熊怪吃核桃这样一个过程,我们需要做的就是想清楚递归出口,当剩下的核桃数量小于1的时候怎么办?当剩下的核桃数量等于1的时候怎么办?,其次就是判断一下剩余核桃数量是奇数时候,怎么处理,剩余核桃数量是偶数的时候,怎么处理。

 

源码

 

public class Test001 {
	
	private static int discard; //丢弃核桃数量统计
	
	public static void main(String[] args) {
		discard = 0;
		eat(1543);
		System.out.println(discard);
	}
	
	//模拟熊怪吃核桃
	//核桃数量一直在变化,n就代表剩余的核桃数量
	private static void eat(int n){
		if(n <= 0){
			return;
		}
		
		if(n == 1){
			//直接丢掉
			discard++;
			return;
		}
		
		//如果程序执行到此处,说明n>=2
		if(n%2==0){
			//吃掉一份,留一份
			eat(n/2);
		}else{
			//先丢掉一个,再吃
			discard++;
			n = n-1;
			eat(n/2);
		}
	}
}

 

结果

 

5

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值