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

来源:互联网 发布:java 查看线程状态 编辑:程序博客网 时间:2024/05/02 04:44

        三眼乌鸦十分口渴,他用自己的预知未来的能力在临死前飞到了一个巫师家,巫师说凛冬将至,我不会给你水,我只会给你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));              }  }



附: