阿里笔试暑期实习 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);
}
}
}

