首页 > 阿里笔试暑期实习 3.15-Java 第二题
头像
lemon201911071331316
编辑于 2021-03-15 21:51
+ 关注

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



全部评论

(2) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

热门推荐