第一种想法通俗,自下而上
import java.util.Scanner;
public class 饮料换购 {
private static long start = 0; //与本题无关,用来计算耗时的
private static long last = 0; //与本题无关,用来计算耗时的
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input=new Scanner(System.in);
int n;
n=input.nextInt();
start = System.currentTimeMillis();
int i = n;
int num;
int sum=n;
while(i>2) {
num=i%3;
i=i/3;
sum +=i;
i+=num;
}
last = System.currentTimeMillis() - start;
System.out.println(sum);
System.out.println("耗时:"+last+"ms");
}
}
第二种是偶然看到大佬写的,用到dfs
觉得不错,特地借鉴一下
import java.util.Scanner;
public class 饮料换购
{
private static long start = 0; //与本题无关,用来计算耗时的
private static long last = 0; //与本题无关,用来计算耗时的
private static int m = 0; //购买的饮料数
public static void DFS(int n,int sum)
{
if(n-3<0) //当m不足3的时候就不能兑换饮料了
{
System.out.println(sum+m); //实际数量=原来购买数量+兑换数
return;
}
DFS(n-2,sum+1); //m的个数大于3,继续兑换并记录下兑换数
}
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
m = in.nextInt();
start = System.currentTimeMillis(); //与本题无关,用来计算耗时的
DFS(m,0); //计算有效数
last = System.currentTimeMillis() - start; //与本题无关,用来计算耗时的
System.out.println("耗时:"+last+"ms"); //与本题无关,用来计算耗时的
}
}