阿里笔试暑期实习 3.15-Java 第二题
第二题没写完,以为是可以一直分割下去,一直在推导dp
结束了才发现只能分两次,直接暴力两个for循环应该就可以
下面的代码不知道对不对,希望各位大佬指正
【格式是我用来进行本地测试的】
第二题 Java代码:
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.PrintWriter; import java.util.Scanner; public class AL_2 { public static Scanner in = new Scanner(new BufferedInputStream(System.in)); public static PrintWriter out = new PrintWriter(new BufferedOutputStream(System.out)); public static void main(String[] args) { while(true){ int n = sc.nextInt(); double sum = 0;//每种情况燃烧时间的和 long count = 0;//可能的分割情况个数 for(int i = 1; i < n;i++){ //第一次分割 int j = n-i; int max = Math.max(i, j); int min = Math.min(i,j); max -= min;//燃烧完短的,长的部分剩下的长度 if(max >= 2){//进行第二次分割 for(int m = 1; m < max; m++){ sum += min;//加上短的那部分燃烧的时间 count++;//情况个数加一 int remain = max - m; sum += Math.max(m,remain);//第二次分割完,燃烧时间应该是长的那部分的燃烧时间 } }else{ count++;//没进行第二次分割:比如:3,2 sum += Math.max(i, j);//燃烧时间直接加上长的那部分需要的燃烧时间 } } System.out.printf("%.4f\n",sum/count); } } }