三眼乌鸦十分口渴,他用自己的预知未来的能力在临死前飞到了一个巫师家,巫师说凛冬将至,我不会给你水,我只会给你11空瓶子,你可以拿空瓶子去换水,每三个空瓶子可以在狐狸哪里换到一瓶水,乌鸦必须喝到五瓶水才能活下来,最后他会活下来吗?
假设巫师给的不是11个空瓶子,而是给了11瓶水,问乌鸦最后总共会喝到多少瓶水?
转载标明链接:http://blog.youkuaiyun.com/wabiaozia/article/details/77105262
方式一:
package aaa;
public class aesop_Fables {
//转载标明链接http://blog.youkuaiyun.com/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.youkuaiyun.com/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));
}
}
附: