日期:2014-05-20 浏览次数:21008 次
public class Demo2 {
static int k=0;//第二轮开始的瓶数
static int a=50;//一开始共计买了多少瓶水
static int b=0;//b=a/3,第一轮下来兑换了多少瓶
static int c=0;//第一轮下来剩下多少瓶
static int sum=50;
public static void drink(int a)
{
if(a>=0)
{
b=a/3;//50/3=16瓶
c=a-b*3;//c=50-16*3=2瓶
k=b+c;//k=16+2=18瓶
a=k;//a=k=18瓶作为下一次循环的a
drink(a);//递归调用玩不来。。。求指教。。。这地方会报java.lang.StackOverflowError
sum+=b;//把b中除出来的数都累加到sum中
}
}
public static void main(String[] args) {
int a=50;
Demo2 demo2=new Demo2();
demo2.drink(a);
System.out.println("总共喝了"+sum+"瓶");
}
}
public class DrunkBottle {
public static void main(String[] args) {
System.out.println("Begin 50, End with: " + drink(50));
}
private static int drink(int bottles) {
if (bottles >= 3) { // 3瓶以下没有奖励,不需要递归计算了,这是重要终止条件
int rewards = bottles / 3; // 奖励
int sum = drink(rewards + bottles % 3); // 递归喝:用“剩余+奖励”递归的喝
return rewards * 3 + sum; // 总计:本次喝 + 递归喝
} else {
return bottles; // 最后几瓶而已了
}
}
}
------解决方案--------------------
public class Demo2 {
static int k=0;//第二轮开始的瓶数
static int a=50;//一开始共计买了多少瓶水
static int c=0;//第一轮下来剩下多少瓶
static int sum=50;
public static void drink(int a)
{
if(a>=3)
{
int b=a/3;//50/3=16瓶
c=a-b*3;//c=50-16*3=2瓶
k=b+c;//k=16+2=18瓶
a=k;//a=k=18瓶作为下一次循环的a
drink(a);//递归调用玩不来。。。求指教。。。这地方会报java.lang.StackOverflowError
sum+=b;//把b中除出来的数都累加到sum中
}
}
public static void main(String[] args) {
int a=50;
Demo2 demo2=new Demo2();
demo2.drink(a);
System.out.println("总共喝了"+sum+"瓶");
}
}
------解决方案--------------------
public class TestPing {
public static void main(String[] args){
int n = 50;
int x = 0;
while(n >= 3){
n = n-3+1;
x = x+3;
}
x = x+n;
System.out.println("一共可以喝"+x+"瓶。");
}
}
------解决方案--------------------
public class DrinkTest {
/**
* 遞減法
* @param botles
* @return
*/
private int drinkBotles(int botles){
// 喝的饮料总数
int totleDrinked =0;
// 满瓶子数
int fullBotles=botles;
// 還能換瓶子的時候
while(fullBotles>=3){
//總瓶子數=fullBotles-3+1
fullBotles=fullBotles-2;