3 条题解
-
-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; } }
信息
- ID
- 4
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- 9
- 标签
- (无)
- 递交数
- 35
- 已通过
- 4
- 上传者