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

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

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

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

方式一:

[html]  view plain  copy
  1. package aaa;  
  2.   
  3. public class aesop_Fables {  
  4. //转载标明链接http://blog.csdn.net/wabiaozia/article/details/77105262  
  5.     public static void main(String[] args) {  
  6. //      现在有的水数  
  7.         Integer c=11;  
  8. //      空瓶子总数(初始值为开始有的瓶水数)  
  9.         Integer a=c;  
  10. //      喝的水数  
  11.         Integer b=0;  
  12.         while(a/3>0){  
  13. //          现在可以喝到多少瓶水  
  14.             b=b+(a/3);  
  15. //          现在瓶子的总数:  
  16.             a=(a/3)+(a%3);  
  17.         }  
  18. //      如果最后剩下两个空瓶子,可以先借一瓶水,喝完后就有三个空瓶子。三个空瓶子可以换一瓶水,把这三个空瓶子还给老板,用来抵消借的一瓶水。  
  19.         if (a==2) {  //等价 (a==2) ? ++b:b  
  20.             b++;  
  21.         }  
  22. //      喝的总瓶水数   
  23.         System.out.println(c+b);  
  24.     }  
  25. }  

方式二:递归

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、付费专栏及课程。

余额充值