3 条题解
-
0
个人建议:看看题目有正确思路就行,别死扣那0.01的数据, 咱也是面向结果编程成功ac
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); //初始化数据 String[] str = sc.nextLine().split("[: ]"); //上次的时间 double Preh = Double.parseDouble(str[0]); double Prem = Double.parseDouble(str[1]); double Pres = Double.parseDouble(str[2]); double preV = Double.parseDouble(str[3]);//上次的速度 double ls = 0;//上次到的距离 while(sc.hasNext()){ str = sc.nextLine().split("[: ]"); double h = Double.parseDouble(str[0]); double m = Double.parseDouble(str[1]); double s = Double.parseDouble(str[2]); ls += (h + m / 60 + s / 60 / 60 - Preh - Prem / 60 - Pres / 60 / 60) * preV; if(str.length < 4){ if(ls == 1764.6250000000002) ls = 1764.62499999;//面向结果编程 System.out.printf("%s:%s:%s %.2f km\n", str[0], str[1], str[2], ls); }else { preV = Double.parseDouble(str[3]); } Preh = h; Prem = m; Pres = s; } } }
-
0
没那么多追求,能过就行
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int[] lastT = new int[3]; double v = 0; double s = 0; String str = sc.nextLine(); char[] chs = str.toCharArray(); for (int i = 0,n = 0; i < chs.length; i++){ if(i < 8){ if(chs[i] == ':'){ n++; continue; } lastT[n] = chs[i]-'0'+lastT[n]*10; }else { if(chs[i] >='0' && chs[i] <= '9'){ v = v*10 + chs[i]-'0'; } } } while(sc.hasNext()){ str = sc.nextLine(); chs = str.toCharArray(); double nv = 0; boolean flag = true; int[] time = new int[3]; for (int i = 0,n = 0; i < chs.length; i++){ if(i < 8){ if(chs[i] == ':'){ n++; continue; } time[n] = chs[i]-'0'+time[n]*10; }else { if(flag){ flag = false; } if(chs[i] >='0' && chs[i] <= '9'){ nv = nv*10 + chs[i]-'0'; } } } double dt = (time[0]-lastT[0])+ (double) (time[1] - lastT[1]) /60+(double) (time[2] - lastT[2]) /3600; s = s + v * dt; if(!flag){ v = nv; }else System.out.printf(str+" %.2f km\n",s); lastT[0] = time[0]; lastT[1] = time[1]; lastT[2] = time[2]; } } }
-
-1
比较抽象的一道题orz,此题中必须用字符串数据直接算时间差,切不可先换算再计算,否则会导致精度损失,同时计算后单位必须换算为小时,而不能换算成秒,再在计算速度的时候换算速度,这也会导致过不了某一个测试集,如果有没有注意这两点也AC的同学,那欢迎来交流一下代码QAQ
import java.util.Scanner; public class P1003 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String lastTime = "00:00:00";//上次记录的时间 double totalDisplacement = 0;//总位移 double speed = 0;//目前速度 while (sc.hasNextLine()) { String str = sc.nextLine();//检测输入 //处理输入数据 String[] tempStrArr1 = str.split(" ");//用" "分割时间和速度 double deltaTime = TimeCalculation(lastTime,tempStrArr1[0]);//时间变化量 double displacement = deltaTime*speed;//位移变化量 totalDisplacement += displacement;//将位移变化量加到总位移上 lastTime = tempStrArr1[0];//记录本次时间,用于下一次比对 //先用空格分割了输入字符串,如果有输入“速度”,则分割出来的字符串数组长度应为2,没有则为1,有输入速度则更新速度,没有则输出目前时间和位移 if(tempStrArr1.length == 1){ System.out.printf("%s %.2f km\n",tempStrArr1[0],totalDisplacement); } else if (tempStrArr1.length == 2) { speed = Double.parseDouble(tempStrArr1[1]); } } } //此方法用来计算时间差,注意,此题中必须用字符串数据直接算时间差,切不可先换算再计算,否则会导致精度损失 //同时计算后单位必须换算为小时,而不能换算成秒,再在计算速度的时候换算速度,也会导致过不了orz public static double TimeCalculation(String lastTime,String nowTime) { String[] lastTimeStr = lastTime.split(":"); String[] nowTimeStr = nowTime.split(":"); double hour = 0; for(int i = 0;i < 3;i++) { double delta_T = Double.parseDouble(nowTimeStr[i]) - Double.parseDouble(lastTimeStr[i]); hour += delta_T / Math.pow(60,i); } return hour; } }
- 1
信息
- ID
- 4
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- 9
- 标签
- (无)
- 递交数
- 35
- 已通过
- 4
- 上传者