一个很有意思的选择题,一次性给你一百万和第一天给你一元,然后在一个月(30天)内每天给你前一天的两倍的钱,你会选择哪一种!
我刚开始也觉得选第一种,一百万哪,第二种才一块钱,虽然分了30天每天给前一天的一倍,我觉得30天也没多少。
后来经过验证,惊讶的发现选择第一种的完全是笨蛋,因为第二种在30天以后居然可以得到十亿元之多。下面是我写的程序,用的循环,但最近在学递归,我很想用递归算法把这个程序写出来。不过小弟初入门道,才疏学浅,还望路过的大哥指点指点,感激不尽!
public static void main(String []args){
long total=count(30);
System.out.println("最终应付:"+total);
}
public static long count(long day){
long totalPrice=0;
long Price=1;
for(int i=1;i<=day;i++){
if(i==1){
Price=1;
}else{
Price = Price*2;
}
totalPrice +=Price;
System.out.println("当天的钱:"+Price+",当天是第"+i+"天");
System.out.println("当天之前一共:"+totalPrice);
}
return totalPrice;
}希望哪位路过的大哥能给出一个递归算法!让小弟学习学习!感激不尽!
我刚开始也觉得选第一种,一百万哪,第二种才一块钱,虽然分了30天每天给前一天的一倍,我觉得30天也没多少。
后来经过验证,惊讶的发现选择第一种的完全是笨蛋,因为第二种在30天以后居然可以得到十亿元之多。下面是我写的程序,用的循环,但最近在学递归,我很想用递归算法把这个程序写出来。不过小弟初入门道,才疏学浅,还望路过的大哥指点指点,感激不尽!
public static void main(String []args){
long total=count(30);
System.out.println("最终应付:"+total);
}
public static long count(long day){
long totalPrice=0;
long Price=1;
for(int i=1;i<=day;i++){
if(i==1){
Price=1;
}else{
Price = Price*2;
}
totalPrice +=Price;
System.out.println("当天的钱:"+Price+",当天是第"+i+"天");
System.out.println("当天之前一共:"+totalPrice);
}
return totalPrice;
}希望哪位路过的大哥能给出一个递归算法!让小弟学习学习!感激不尽!
if(day==1)
{
return 1;
}else
{
return 2*count(day-1)
}
}
public static void main(String []args){ long a=1000000;
int i=1;
long mony=1;for(i=2;i<=30;i++){
mony=mony*2;
}
System.out.println("第二种方法求的总钱:"+mony);}
}
结果:536870912,很显然第二种方法合算。
public class Help { public static void main(String[] args) {
int total=0;
for(int i=1;i<=30;i++){
total+=b(i);
}
System.out.println(total);
}
static int b(int c){
if(c==1)return 1;
return b(c-1)*2;
}
}
是这样吧?
if (day == 1)
return 1;
return 2 * count(day-1);
}
public static void display(){
long sum = 0;
for (int i = 30; i > 0; i--)
sum += count(i);
System.out.println("最终应付:" + sum);
}public static void main(String[] args) {
display();
}
不用递归也能算int sum = 1; //第一天
for (int i=1; i<=30; i++) {
sum *= 2; //即 sum = sum * 2; //每天是前一天的2倍
}
System.out.println(sum);
return 1 * (1 - days * Math.pow(2, 30)) / (1 - 2);