解题思路:把所有可能出现的结果放在数组当中,按照相应的序号,对号输出,这是一种很好的解题思路,特别是此题时分的英语表示一共就24种情况,按照一定的规律进行拼凑,就能得出正确答案。
首先来说处理时位,一共24个小时,分两种情况,一种是小于二十的,直接可以对位输出,剩下的求余也可求的。
然后再来处理分位,一共有六十分钟,比较麻烦,但总体思路与上相似,可以进行求余操作,然后得出正确答案,当然这是要建立在分位不为0的情况下,若为0直接输出o’ clack,
解题难点:如何利用24个单词进行巧妙地拼凑,特别是处理分位时,我在本题中选择了开关语句,如果是一连串判断分支,会显得十分繁琐。
import java.util.Scanner;
public class 报时助手 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int h = in.nextInt();
int m = in.nextInt();
String[] time = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen","sixteen", "seventeen", "eighteen", "nineteen", "twenty","thirty","forty","fifty"};
//首先来处理时位的情况
if(h <= 20)
System.out.print(time[h]+" ");
else {
System.out.print(time[20]+ " "+time[h%20]+" ");
}
//再处理分位的情况
if(m != 0) {
//对不同时间段做不同处理
switch(m/10) {
case 2:{
if(m == 20)
System.out.println(time[20]);
else
System.out.println(time[20]+" "+time[m%20]);
break;
}
case 3:{
if(m == 30)
System.out.println(time[21]);
else
System.out.println(time[21]+" "+time[m%30]);
break;
}
case 4:{
if(m == 40)
System.out.println(time[22]);
else
System.out.println(time[22]+" "+time[m%40]);
break;
}
case 5:{
if(m == 50)
System.out.println(time[23]);
else
System.out.println(time[23]+" "+time[m%50]);
break;
}
default:{
System.out.println(time[m]);break;
}
}
}
else
System.out.println("o'clock");
}
}