权利的游戏-三眼乌鸦喝水算法Aesop's Fables

三眼乌鸦十分口渴,他用自己的预知未来的能力在临死前飞到了一个巫师家,巫师说凛冬将至,我不会给你水,我只会给你11空瓶子,你可以拿空瓶子去换水,每三个空瓶子可以在狐狸哪里换到一瓶水,乌鸦必须喝到五瓶水才能活下来,最后他会活下来吗?

假设巫师给的不是11个空瓶子,而是给了11瓶水,问乌鸦最后总共会喝到多少瓶水?

转载标明链接:http://blog.csdn.net/wabiaozia/article/details/77105262

方式一:

package aaa;

public class aesop_Fables {
//转载标明链接http://blog.csdn.net/wabiaozia/article/details/77105262
	public static void main(String[] args) {
//		现在有的水数
		Integer c=11;
//		空瓶子总数(初始值为开始有的瓶水数)
		Integer a=c;
//		喝的水数
		Integer b=0;
		while(a/3>0){
//			现在可以喝到多少瓶水
			b=b+(a/3);
//			现在瓶子的总数:
			a=(a/3)+(a%3);
		}
//		如果最后剩下两个空瓶子,可以先借一瓶水,喝完后就有三个空瓶子。三个空瓶子可以换一瓶水,把这三个空瓶子还给老板,用来抵消借的一瓶水。
		if (a==2) {  //等价 (a==2) ? ++b:b
			b++;
		}
//		喝的总瓶水数 
		System.out.println(c+b);
	}
}

方式二:递归

package aaa;  
  //方式一
public class aesop_Fables {  
    //转载标明链接http://blog.csdn.net/wabiaozia/article/details/77105262  
    public static void water(Integer a,Integer b){  
          
        if (a>=3) {  
            b=b+(a/3);  
            a=(a/3)+(a%3);  
            water(a,b);  
        }else {  
             System.out.println((a==2) ? ++b:b);  
        }  
    }  
 //方式二
 public static Integer waters(Integer a,Integer b){  
    	if (a>=3) {  
    		b=b+(a/3);  
    		a=(a/3)+(a%3);  
    		return waters(a,b);  
    	}else {  
    		return((a==2) ? ++b:b);  
    	} 
    } 
    public static void main(String[] args) {  
//      现在有的水数  
        Integer c=11;  
  //方式一
    water(c,0);
  //方式二
    System.out.println(waters(c,0));
          
    }  
}


附:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菠萝科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值