Description
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位,所以只用前若干行表示其摩斯电码,其余行为空)。
现在你要做的就是,对于一个给定的时间,打印出表盘上点阵的亮暗情况。
Input
输入的第一行为一个整数T (1 <= T <= 200),表示接下来一共有T组测试数据。
每组测试数据占一行,包含三个长度为2的字符串,中间用空格隔开。第一个字符串为一个01到12之间的整数,表示小时。第二个字符串为一个00到59之间的整数,表示分钟。第三个字符串为”AM”或”PM”。
Output
对于每组测试数据,输出5行18列字符来表示点阵的亮暗情况,其中'#'表示这个点是亮的,'.'表示这个点是暗的。
在每组测试数据后面输出一个空行。
Sample Input
3
02 17 PM
12 59 PM
01 00 AM
Sample Output
.##.#..#..##.#..## .##.#..##.##.##.## .##.##.##.#..##... .##.##.##.#..#.... .##.##.##.#....... .#..#..#..##.#..## .##.#..#..##.##.## .##.##.#..##.##... .##.##.#..##.#.... .##.##.#..#....... .##.#..##.##.#..## .##.##.##.##.##.## .##.##.##.##...... .##.##.##.##...... .##.##.##.##......
咋一看比较复杂认真分析下发现将数字或字母翻译成摩斯码并用点阵的形式输出出来即可。为了程序写起来方便,可以先用数组打一张表,描述每个数字和A、P、M对应的点阵,这样需要用到哪个数字或字母的时候直接打印对应的数组即可。
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 ", &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 "); 17 j = j - 1; 18 continue; 19 } 20 else 21 //printf("%d %d %c ", 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 -_-||| ",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(" "); 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(" "); 108 } 109 printf(" "); 110 } 111 return 0; 112 }