(java实现)
题目描述:
小W有一个电子时钟用于显示时间,显示的格式为HH:MM:SS,HH,MM,SS分别表示时,分,秒。其中时的范围为[‘00’,‘01’…‘23’],分的范围为[‘00’,‘01’…‘59’],秒的范围为[‘00’,‘01’…‘59’]。
但是有一天小W发现钟表似乎坏了,显示了一个不可能存在的时间“98:23:00”,小W希望改变最少的数字,使得电子时钟显示的时间为一个真实存在的时间,譬如“98:23:00”通过修改第一个’9’为’1’,即可成为一个真实存在的时间“18:23:00”。修改的方法可能有很多,小W想知道,在满足改变最少的数字的前提下,符合条件的字典序最小的时间是多少。其中字典序比较为用“HHMMSS”的6位字符串进行比较。
输入描述:
每个输入数据包含多个测试点。每个测试点后有一个空行。 第一行为测试点的个数T(T<=100)。 每个测试点包含1行,为一个字符串”HH:MM:SS”,表示钟表显示的时间。
输出描述:
对于每个测试点,输出一行。如果钟表显示的时间为真实存在的时间,则不做改动输出该时间,否则输出一个新的”HH:MM:SS”,表示修改最少的数字情况下,字典序最小的真实存在的时间。
示例1:
输入
2
19:90:23
23:59:59
输出
19:00:23
23:59:59
问题分析:
直接判断H,M,S是否分别大于23,59,59。
如果大于,则对10进行取模。
思路一:若使用“控制输出位数”,则在输出的时候需要注意:只有一位的时候,需要补“0”。
思路二:若是采用字符串输出,对字符串处理,若小于合法值,则补“0”;
相关知识:
Java中控制输出位数
// 第一种 DecimalFormat df = new DecimalFormat("#0.00"); float data; data = sc.nextFloat(); System.out.println(df.format(data)); // 第二种,模仿c语言的输出方式 System.out.printf("%.2f\n", data); // 第三种 System.out.println(String.format("%.2f", data));
以上三种是针对小数输出控制位数。需要注意:
Java中对double来说占位符同样是使用%f,而并非%lf.
第二种和第三种使用占位符的方式会自动进行四舍五入,比较不方便。
数字控制输出位数(非小数)
Scanner sc = new Scanner(System.in); int n = sc.nextInt(); System.out.printf("%5d",n);
同样地,使用类似于C中的printf(),使用占位符限制输出格式。
system.out.printf(“%02d”,2); %d表示打印整型的, %2d表示把整型数据打印最低两位, %02d表示把整型数据打印最低两位,如果不足两位,用0补齐
参考代码:
思路一实现:
import java.util.*; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); while (input.hasNext()) { int n = Integer.parseInt(input.nextLine()); for (int i=0; i<n; i++) { String[] str = input.nextLine().split(":"); int h = Integer.parseInt(str[0]); int m = Integer.parseInt(str[1]); int s = Integer.parseInt(str[2]); if (h > 23) h %= 10; if (m > 59) m %= 10; if (s > 59) s %= 10; System.out.printf("%02d:%02d:%02d\n",h,m,s); } } } }
思路二实现:
import java.util.*; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); while (input.hasNext()) { int n = Integer.parseInt(input.nextLine()); for (int i=0; i<n; i++) { String[] str = input.nextLine().split(":"); int h = Integer.parseInt(str[0]); int m = Integer.parseInt(str[1]); int s = Integer.parseInt(str[2]); if (h > 23) { str[0] = "0" + str[0].charAt(1); } if (m > 59) { str[1] = "0" + str[1].charAt(1); } if (s > 59) { str[2] = "0" + str[2].charAt(1); } System.out.println(str[0]+":"+str[1]+":"+str[2]); } } } }