CSUOJ 1269 Morse Code Wristwatch

Description

Tokyoflash推出了一款摩斯电码手表,样图如下。

要读懂这款手表,首先要了解一些摩斯电码的知识。

在了解了这些摩斯电码符号之后,就不难看懂表盘中显示的信息是“02 17 PM”了,也就是指下午217分。在12小时计时法中小时的取值范围为0112之间的整数,AM代表上午,PM代表下午。

接下来我们就详细介绍一下这款摩斯电码手表是如何显示时间的。

手表的表盘是一个5*18的点阵,由65*3的点阵自左至右排列而成,每个5*3的点阵都显示了一个数字或字母的信息。

对于每个5*3的点阵,最左边一列始终都是暗的,类似分割线的作用。剩下两列由上至下一共5行,依次描述了一个数字或字母的摩斯电码。如果一行中两个点都是亮的,则表示摩斯电码中的'-',如果左边的点是亮的而右边的点是暗的,则表示摩斯电码中的'.',如果两个点都是暗的,则表示这个位置为空(因为字母'A', 'P', 'M'的摩斯电码不足5位,所以只用前若干行表示其摩斯电码,其余行为空)。

现在你要做的就是,对于一个给定的时间,打印出表盘上点阵的亮暗情况。

Input

输入的第一行为一个整数T (1 <= T <= 200),表示接下来一共有T组测试数据。

每组测试数据占一行,包含三个长度为2的字符串,中间用空格隔开。第一个字符串为一个0112之间的整数,表示小时。第二个字符串为一个0059之间的整数,表示分钟。第三个字符串为”AM”或”PM”

Output

对于每组测试数据,输出518列字符来表示点阵的亮暗情况,其中'#'表示这个点是亮的,'.'表示这个点是暗的。

在每组测试数据后面输出一个空行。

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 }
 
原文地址:https://www.cnblogs.com/zzy9669/p/3878775.html