蓝桥杯 报时助手(Java)

蓝桥杯 报时助手(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慢慢存也很累呀。很久没学习也没写博客了。新年过的也不开心。新的一年,祝自己越来越爱学习!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值