标签:csu 模拟
题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1269
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
.##.#..#..##.#..##
.##.#..##.##.##.##
.##.##.##.#..##...
.##.##.##.#..#....
.##.##.##.#.......
.#..#..#..##.#..##
.##.#..#..##.##.##
.##.##.#..##.##...
.##.##.#..##.#....
.##.##.#..#.......
.##.#..##.##.#..##
.##.##.##.##.##.##
.##.##.##.##......
.##.##.##.##......
.##.##.##.##......
HINT
Source
代码如下:
#include<stdio.h>
#include<algorithm>
using namespace std;
char mp[20][25];
int aa[25]= {0,1,2,0,0,0};
int pp[25]= {0,1,2,2,1,0};
int mm[25]= {0,2,2,0,0,0};
int num[15][9]= {{0,2,2,2,2,2},{0,1,2,2,2,2},{0,1,1,2,2,2},{0,1,1,1,2,2},{0,1,1,1,1,2},{0,1,1,1,1,1},{0,2,1,1,1,1},{0,2,2,1,1,1},{0,2,2,2,1,1},{0,2,2,2,2,1},};
void dian(int n,char c)
{
for(int i=1; i<=5; i++)
mp[i][n]=c;
}
void doit(int biao,char c)
{
int *p;
if(c=='A')
p=aa;
else if(c=='M')
p=mm;
else if(c=='P')
p=pp;
else
p=num[c-'0'];
for(int i=1; i<=5; i++)
{
if(p[i]==1)
{
mp[i][biao]='#';
mp[i][biao+1]='.';
}
if(p[i]==2)
{
mp[i][biao]='#';
mp[i][biao+1]='#';
}
if(p[i]==0)
{
mp[i][biao]='.';
mp[i][biao+1]='.';
}
}
}
int main()
{
char s[200];
int t;
scanf("%d",&t);
getchar();
while(t--)
{
gets(s);
int biao=1;
for(int i=0; s[i]!=0; i++)
{
if(s[i]!=' ')
{
dian(biao++,'.');
doit(biao,s[i]);
biao+=2;
}
}
for(int i=1; i<=5; i++)
{
for(int j=1; j<=18; j++)
{
printf("%c",mp[i][j]);
}
puts("");
}
puts("");
}
return 0;
}
CSU 1269: Morse Code Wristwatch(模拟啊 )
标签:csu 模拟
原文地址:http://blog.csdn.net/u012860063/article/details/41849977