简单算法题

   猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,
   又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
   以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,
   见只剩下一个桃子了。求第一天共摘了多少。 
public int ChiTao( int d) {
		//第十天只有一个桃子
		if(d == 1) {
			return 1;
		}
		//每天都吃了前一天剩的一半零一个
		return (ChiTao(d-1)+1)*2;
	}
	public static void main(String[] args) {
		Test t = new Test();
		System.out.println(t.ChiTao(10));
	}
	森林里有一只熊怪,很爱吃核桃。不过它有个习惯,每次都把找到的核桃分成相等的两份,
	吃掉一份,留一份。如果不能等分,熊怪就会扔掉一个核桃再分。第二天再继续这个过程,
	直到最后剩一个核桃了,直接丢掉。
	有一天,熊怪发现了1543个核桃,请问,它在吃这些核桃的过程中,一共要丢掉多少个核桃。
int hetao = 0; 
	public int HeTao(int ht) {
		//递归的出口,熊怪只有一个核桃了
		if(ht == 1) {
			return 1;
		}
		//核桃可以等分的情况下
		if(ht % 2 == 0) {
			HeTao(ht /2);
		}else {
			//核桃不能等分时,扔掉一个核桃再分
			hetao++;
			HeTao((ht/2)-1);
		}
		
		return hetao;
	}
	public static void main(String[] args) {
		Test5 t = new Test5();
		System.out.println(t.HeTao(1543));
	}

在用递归的时候要注意顺序吃一个再等分,在写式子的时候要先除再减,因为用递归算的时候是回溯,所以顺序要颠倒,答案才能正确。

	一根高筋拉面,中间切一刀,可以得到2根面条。
	如果先对折1次,中间切一刀,可以得到3根面条。
	如果连续对折2次,中间切一刀,可以得到5根面条。
	那么,连续对折10次,中间切一刀,会得到多少面条呢?
	int miantiao = 2;
	public int MianTiao(int dao) {
		if(dao == 0) {
			return 2;
		}
		miantiao = miantiao * 2 - 1;
		MianTiao(dao - 1);
		return miantiao;
	}
	public static void main(String[] args) {
		Test6 t= new Test6();
		System.out.println(t.MianTiao(10));
	}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值