码迷,mamicode.com
首页 > 其他好文 > 详细

CSU 1269: Morse Code Wristwatch(模拟啊 )

时间:2014-12-10 19:51:45      阅读:276      评论:0      收藏:0      [点我收藏+]

标签:csu   模拟   

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1269


Description

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

bubuko.com,布布扣

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

bubuko.com,布布扣

bubuko.com,布布扣

在了解了这些摩斯电码符号之后,就不难看懂表盘中显示的信息是“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

.##.#..#..##.#..##
.##.#..##.##.##.##
.##.##.##.#..##...
.##.##.##.#..#....
.##.##.##.#.......

.#..#..#..##.#..##
.##.#..#..##.##.##
.##.##.#..##.##...
.##.##.#..##.#....
.##.##.#..#.......

.##.#..##.##.#..##
.##.##.##.##.##.##
.##.##.##.##......
.##.##.##.##......
.##.##.##.##......

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!