蓝桥杯 报时助手(Java)
1.题目:
给定当前的时间,请用英文的读法将它读出来。
时间用时h和分m表示,在英文的读法中,读一个时间的方法是:
如果m为0,则将时读出来,然后加上“o’clock”,如3:00读作“three o’clock”。
如果m不为0,则将时读出来,然后将分读出来,如5:30读作“five thirty”。
时和分的读法使用的是英文数字的读法,其中0~20读作:
0:zero, 1: one, 2:two, 3:three, 4:four, 5:five, 6:six, 7:seven, 8:eight, 9:nine, 10:ten, 11:eleven, 12:twelve, 13:thirteen, 14:fourteen, 15:fifteen, 16:sixteen, 17:seventeen, 18:eighteen, 19:nineteen, 20:twenty。
30读作thirty,40读作forty,50读作fifty。
对于大于20小于60的数字,首先读整十的数,然后再加上个位数。如31首先读30再加1的读法,读作“thirty one”。
按上面的规则21:54读作“twenty one fifty four”,9:07读作“nine seven”,0:15读作“zero fifteen”。
输入
输入包含两个非负整数h和m,表示时间的时和分。非零的数字前没有前导0。h小于24,m小于60。
输出
输出时间时刻的英文。
样例输入
0 15
样例输出
zero fifteen
2.1.思路:
看到这题第一反应就是用HashMap来存储,之前LeetCode刷到过用这种结构来存储非常nice,然后就这样做的,后面判断并取出就行了。不用动脑壳,但是刚开始没想到用取余来判断(后来看了网上各路大神的解答),导致存了很多,就比较麻烦了,还好英语单词基本都还会写,但是seven没写对,最后找错找安逸了。还是记录下笨笨的方法吧
下面展示一些 内联代码片
。
import java.util.Scanner;
import java.util.HashMap;
public class TimingAssistant {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
assistant(a,b);
}
public static void assistant(int a, int b) {
//先将数字对应的英文用HashMap存储起来
HashMap<Integer,String> m = new HashMap<Integer,String>();
m.put(0,"zero");m.put(1,"one");m.put(2,"two");m.put(3,"three");m.put(4,"four");
m.put(5,"five");m.put(6,"six");m.put(7,"seven");m.put(8,"eight");m.put(9,"nine");
m.put(10,"ten");m.put(11,"eleven");m.put(12,"twelve");m.put(13,"thirteen");m.put(14,"fourteen");
m.put(15,"fifteen");m.put(16,"sixteen");m.put(17,"seventeen");m.put(18,"eighteen");m.put(19,"nineteen");
m.put(20,"twenty");m.put(21,"twenty one");m.put(22,"twenty two");m.put(23,"twenty three");m.put(24,"twenty four");
m.put(25,"twenty five");m.put(26,"twenty six");m.put(27,"twenty seven");m.put(28,"twenty eight");m.put(29,"twenty nine");
m.put(30,"thirty");m.put(31,"thirty one");m.put(32,"thirty two");m.put(33,"thirty three");m.put(34,"thirty four");
m.put(35,"thirty five");m.put(36,"thirty six");m.put(37,"thirty seven");m.put(38,"thirty eight");m.put(39,"thirty nine");
m.put(40,"forty");m.put(41,"forty one");m.put(42,"forty two");m.put(43,"forty three");m.put(44,"forty three");
m.put(45,"forty five");m.put(46,"forty six");m.put(47,"forty seven");m.put(48,"forty eight");m.put(49,"forty nine");
m.put(50,"fifty");m.put(51,"fifty one");m.put(52,"fifty two");m.put(53,"fifty three");m.put(54,"fifty four");
m.put(55,"fifty five");m.put(56,"fifty six");m.put(57,"fifty seven");m.put(58,"fifty eight");m.put(59,"fifty nine");
if(b == 0) {
String ans = m.get(a);
System.out.println(ans+" o'clock");
} else if(b != 0) {
String ans1 = m.get(a);
String ans2 = m.get(b);
System.out.println(ans1 + " "+ ans2);
}
}
}
然后用取余法改成了这样
public static void assistant2(int a, int b) {
HashMap<Integer,String> m = new HashMap<Integer,String>();
m.put(0,"zero");m.put(1,"one");m.put(2,"two");m.put(3,"three");m.put(4,"four");
m.put(5,"five");m.put(6,"six");m.put(7,"seven");m.put(8,"eight");m.put(9,"nine");
m.put(10,"ten");m.put(11,"eleven");m.put(12,"twelve");m.put(13,"thirteen");m.put(14,"fourteen");
m.put(15,"fifteen");m.put(16,"sixteen");m.put(17,"seventeen");m.put(18,"eighteen");m.put(19,"nineteen");
m.put(20,"twenty");m.put(30,"thirty");m.put(40,"forty");m.put(50,"fifty");
if(b == 0) {
String ans = m.get(a);
System.out.println(ans+" o'clock");
} else if(a<= 20 && b <=20) {
String ans1 = m.get(a);
String ans2 = m.get(b);
System.out.println(ans1 + " "+ ans2);
} else if(a <= 20 && b == 30 || b == 40 || b == 50 ) {
String ans1 = m.get(a);
String ans2 = m.get(b);
System.out.println(ans1 + " "+ ans2);
} else if(a > 20 && b == 30 || b == 40 || b == 50 ) {
int temp1 = a % 10;//取出个位值
int temp2 = 20;//因为a最大24,所以直接设置为20了
String ans1 = m.get(temp1);
String ans1_1 = m.get(temp2);
String ans2 = m.get(b);
System.out.println(ans1_1+" "+ ans1 + " "+ ans2);
} else if(a > 20 && b > 20 ) {
int temp1 = a % 10;
int temp2 = 20;
int temp3 = b % 10;//取出个位
int temp4 = b / 10 * 10;//取出十位,再乘以10,就是整数了
String ans1 = m.get(temp1);
String ans1_1 = m.get(temp2);
String ans2 = m.get(temp3);
String ans2_2 = m.get(temp4);
System.out.println(ans1_1+" "+ ans1 + " "+ ans2_2 + " "+ ans2);
} else if(a <= 20 && b > 20 ) {
int temp3 = b % 10;
int temp4 = b / 10 * 10;
String ans1 = m.get(a);
String ans2 = m.get(temp3);
String ans2_2 = m.get(temp4);
System.out.println(ans1 + " "+ ans2_2 + " "+ ans2);
}
}
然后再简洁一点可以将里面temp保存的值直接在get那里进行取余,这样代码更加简洁。存储也可以用String数组存储,用switch来判断。
3.学习心得:感觉c++的位移法更牛批一点,但是看不懂哈哈。还有就是不能一味的套,不懂脑壳,HashMap慢慢存也很累呀。很久没学习也没写博客了。新年过的也不开心。新的一年,祝自己越来越爱学习!