bc_ade
Izzy_yang
采纳率100%
2016-09-12 12:09

java面试题目面试题目

5
已采纳

Robin和Lily非常喜欢开车,他们经常讨论谁开的更好更快。现在有一条公路,起点
是0公里,终点是100公里。这条公路被划分为N段,每一段有不同的限速。现在他们从A公里处开始,到B公里处结束。请帮他们计算在不超过限速的情况下,最少需要多少时间完成这段路程。
输入:
1、第一行为公路划分的段数N
2、接下来N行,每行三个正整数,分别是起始点,终止点(前后两段一定保证是连续的),
和限速值(单位:公里/小时)
3、紧接是要计算的起始点A,和终止点B
输出:
1、输出为一行,即从A到B需要的最少时间(单位:小时),精确到小数点后两位
Sample Input:
4
0 30 10
30 40 20
40 80 20
80 100 5
20 60
Sample Output:
2.50

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

5条回答

  • qq_29594393 当作看不见 5年前

    直接上代码了,自己看一下吧

     import java.util.Scanner;
    
    
    import java.util.*;
    public class test {
        static float time=0;
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
             Scanner sc = new Scanner(System.in);
             int N =Integer.parseInt((String)sc.nextLine())+1;
             String[] str=new String[N];
             String[] str1;
    
             for(int i=0;;i++){
                 str[i]= (String) sc.nextLine();
                 str1=str[i].split(" ");
                 if(str1.length==2){
                     break;
                 }
             }
             String str2=str[str.length-1];
             int begin=Integer.parseInt(str2.split(" ")[0]);
             int end  =Integer.parseInt(str2.split(" ")[1]);
             System.out.println(end+"  "+begin);
             check(str, begin, end);
        }
        public static void check(String[] str,int begin,int end){
            float f,f1,speed;
            String str1;
            for(int i=0;i<str.length;i++){
                str1=str[i];
                f=Integer.parseInt(str1.split(" ")[0]);
                f1=Integer.parseInt(str1.split(" ")[1]);
                speed=Integer.parseInt(str1.split(" ")[2]);
                if(begin>f&&begin<f1&&end>f1){
                    time+=(f1-begin)/speed;
                }
                else if(end<=f1){
                    time+=(end-f)/speed;
                    break;
                }
                else{
                    time+=(f1-f)/speed;
                }
            }
            System.out.print(time);
        }
    }
    
    点赞 评论 复制链接分享
  • xubo_ob 海_贼-王 5年前

    这个题目考虑的最主要应该不是编码问题,而是对现实生活情景建模时考虑问题是否完全。

    估计只要考虑到车的加速和减速是需要时间和路程进行缓冲的,就可以通过了。

    点赞 评论 复制链接分享
  • china_hechuan china_hechuan 5年前
    import java.util.Scanner;
    
    public class Main {
        public static void main(String args[]) {
            Scanner scan = new Scanner(System.in);
            int n = scan.nextInt(); //读入分段数;
            float time = 0f;
            float[][] info = new float[n][3];
            for(int i=0; i<n; i++){
                for(int j=0; j<3; j++){
                    info[i][j] = scan.nextFloat();
                }
            }
            float begin = scan.nextFloat(); //起点
            float end = scan.nextFloat(); //终点
            float curr = begin; //从起点出发
            int i=0;
            while(info[i][1]<begin){ //获得开始的这一段
                i++; 
            }
            while(info[i][1]<end){ //直到终点小于这一段结束
                time += (info[i][1] - curr)/info[i][2];
                curr = info[i][1];
                i++;
            }
            time += (end - info[i][0])/info[i][2];
    
            System.out.printf("%.2f%n", time);
        }
    }
    
    点赞 评论 复制链接分享
  • ismaohanjun ismaohanjun 5年前

    import java.util.Scanner;

    public class Main {
    public static void main(String[] args){
    Scanner scanner = new Scanner(System.in);
    double time = 0;
    int N = scanner.nextInt();
    int arr[][] = new int[N][3];
    for(int i = 0; i < N; i++){
    for(int j = 0; j < 3; j++){
    arr[i][j] = scanner.nextInt();
    }
    if(i == N-1){
    break;
    }
    }

        int A = scanner.nextInt();
        int B = scanner.nextInt();
    
        for(int i = 0; i < N; i++){
            if(A < arr[i][1] && B < arr[i][1]){
                time += (double)(B-A)/arr[i][2];
                break;
            }
            if(A < arr[i][1] && B > arr[i][1]){
                time += (double)(arr[i][1] - A)/arr[i][2];
                A = arr[i][1];
            }
        }
    
        System.out.printf("%.2f", time);
        scanner.close();
    }
    

    }

    点赞 评论 复制链接分享
  • qq_29594393 当作看不见 5年前

    算是比较简单的问题,分段计算,而且连加速度都没有
    1.一开始输入的信息就是分段的段的数量,
    2.根据 输入判断从哪一段开始,经过每一段,直到终点的值,
    3.累加值,

    点赞 评论 复制链接分享

为你推荐