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);
}
}
这个题目考虑的最主要应该不是编码问题,而是对现实生活情景建模时考虑问题是否完全。
估计只要考虑到车的加速和减速是需要时间和路程进行缓冲的,就可以通过了。