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