java面试题目面试题目

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

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

 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);
    }
}

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

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();
}

}

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);
    }
}

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

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