一瓶啤酒1块钱,两个空瓶能换1瓶啤酒,我有20块钱,请问我能买多少瓶啤酒?请写一个算法。
最近去面试碰到一个笔试题,当时没有写出来,回来之后问了朋友,得出以下两种方式。
第一种如下:
/**
* 参数 sumBeer 总的啤酒 cnt 总钱数 cntToBeer 兑换基数
*
* @param a
* @return
*/
private static int caculate(int sumBeer, int cnt, int cntToBeer) {
sumBeer += cnt / cntToBeer;
cnt = (cnt / cntToBeer + cnt % cntToBeer);
if (cnt / cntToBeer == 0) {
return sumBeer;
}
return caculate(sumBeer, cnt, cntToBeer);
}
第二种方式如下:
public class Beerbottole {
private int sum; //总共多少瓶
private int rate; //兑换基数
public void count2(int sum) {
if(sum < rate)
return;
int t = sum/rate;
this.sum += t;
int k = t + sum%rate;
count2(k);
}
public static void main(String[] args) {
int sum = 3;
Beerbottole b = new Beerbottole();
b.rate = 2;
b.sum = sum;
//b.count(sum);
b.count2(sum);
System.out.println(b.sum);
}
}
第三种
public class Test {
public static void main(String args[]) {
int money = 20;
int sum = money + getBeer(20);
System.out.println(sum);
}
public static int getBeer(int bottle) {
if(bottle>1)
return bottle/2+getBeer((bottle/2)+(bottle%2));
return 0;
}
}
对于这个问题,还有什么样的算法?