Tokyoflash推出了一款摩斯电码手表,样图如下。
要读懂这款手表,首先要了解一些摩斯电码的知识。
在了解了这些摩斯电码符号之后,就不难看懂表盘中显示的信息是“02 17 PM”了,也就是指下午2点17分。在12小时计时法中小时的取值范围为01到12之间的整数,AM代表上午,PM代表下午。
接下来我们就详细介绍一下这款摩斯电码手表是如何显示时间的。
手表的表盘是一个5*18的点阵,由6个5*3的点阵自左至右排列而成,每个5*3的点阵都显示了一个数字或字母的信息。
对于每个5*3的点阵,最左边一列始终都是暗的,类似分割线的作用。剩下两列由上至下一共5行,依次描述了一个数字或字母的摩斯电码。如果一行中两个点都是亮的,则表示摩斯电码中的‘-‘,如果左边的点是亮的而右边的点是暗的,则表示摩斯电码中的‘.‘,如果两个点都是暗的,则表示这个位置为空(因为字母‘A‘, ‘P‘, ‘M‘的摩斯电码不足5位,所以只用前若干行表示其摩斯电码,其余行为空)。
现在你要做的就是,对于一个给定的时间,打印出表盘上点阵的亮暗情况。
输入的第一行为一个整数T (1 <= T <= 200),表示接下来一共有T组测试数据。
每组测试数据占一行,包含三个长度为2的字符串,中间用空格隔开。第一个字符串为一个01到12之间的整数,表示小时。第二个字符串为一个00到59之间的整数,表示分钟。第三个字符串为”AM”或”PM”。
对于每组测试数据,输出5行18列字符来表示点阵的亮暗情况,其中‘#‘表示这个点是亮的,‘.‘表示这个点是暗的。
在每组测试数据后面输出一个空行。
1 #include<stdio.h>
2 #include<string>
3 using namespace std;
4
5 int main()
6 {
7 char s[10], ans[5][6];
8 int num;
9 string s0 = "-----", s1 = ".----", s2 = "..---", s3 = "...--", s4 = "....-", s5 = ".....",
10 s6 = "-....", s7 = "--...", s8 = "---..", s9 = "----.", sa = ".- ", sp = ".--. ", sm = "-- ";
11 scanf("%d\n", &num);
12 while(num--){
13 gets(s);
14 for(int i = 0, j = 0; i < 8; i++, j++){
15 if(i == 2 || i == 5){
16 //printf("it work\n");
17 j = j - 1;
18 continue;
19 }
20 else
21 //printf("%d %d %c\n", i, j, s[i]);
22 switch(s[i]){
23 case ‘0‘:{
24 for(int k = 0; k < 5; k++){
25 ans[k][j] = s0[k];
26 //printf("%c -_-|||\n",ans[k][j]);
27 }
28 break;
29 }
30 case ‘1‘:{
31 for(int k = 0; k < 5; k++)
32 ans[k][j] = s1[k];
33 break;
34 }
35 case ‘2‘:{
36 for(int k = 0; k < 5; k++)
37 ans[k][j] = s2[k];
38 break;
39 }
40 case ‘3‘:{
41 for(int k = 0; k < 5; k++)
42 ans[k][j] = s3[k];
43 break;
44 }
45 case ‘4‘:{
46 for(int k = 0; k < 5; k++)
47 ans[k][j] = s4[k];
48 break;
49 }
50 case ‘5‘:{
51 for(int k = 0; k < 5; k++)
52 ans[k][j] = s5[k];
53 break;
54 }
55 case ‘6‘:{
56 for(int k = 0; k < 5; k++)
57 ans[k][j] = s6[k];
58 break;
59 }
60 case ‘7‘:{
61 for(int k = 0; k < 5; k++)
62 ans[k][j] = s7[k];
63 break;
64 }
65 case ‘8‘:{
66 for(int k = 0; k < 5; k++)
67 ans[k][j] = s8[k];
68 break;
69 }
70 case ‘9‘:{
71 for(int k = 0; k < 5; k++)
72 ans[k][j] = s9[k];
73 break;
74 }
75 case ‘A‘:{
76 for(int k = 0; k < 5; k++)
77 ans[k][j] = sa[k];
78 break;
79 }
80 case ‘P‘:{
81 for(int k = 0; k < 5; k++)
82 ans[k][j] = sp[k];
83 break;
84 }
85 case ‘M‘:{
86 for(int k = 0; k < 5; k++)
87 ans[k][j] = sm[k];
88 break;
89 }
90 }
91 }
92 /*
93 for(int i = 0; i < 5; i++){
94 for(int j =0; j < 6; j++)
95 printf("%c", ans[i][j]);
96 printf("\n");
97 }
98 */
99 for(int i = 0; i < 5; i++){
100 for(int j =0; j < 6; j++)
101 if(ans[i][j] == ‘-‘)
102 printf(".##");
103 else if(ans[i][j] == ‘.‘)
104 printf(".#.");
105 else if(ans[i][j] == ‘ ‘)
106 printf("...");
107 printf("\n");
108 }
109 printf("\n");
110 }
111 return 0;
112 }