17 多校 - 4 - 1011 - Time To Get Up (HDU 6077)

27 篇文章 0 订阅

Time To Get Up

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)
Total Submission(s): 218    Accepted Submission(s): 179


Problem Description
Little Q's clock is alarming! It's time to get up now! However, after reading the time on the clock, Little Q lies down and starts sleeping again. Well, he has  5 alarms, and it's just the first one, he can continue sleeping for a while.

Little Q's clock uses a standard 7-segment LCD display for all digits, plus two small segments for the '':'', and shows all times in a 24-hour format. The '':'' segments are on at all times.



Your job is to help Little Q read the time shown on his clock.
 

Input
The first line of the input contains an integer  T(1T1440) , denoting the number of test cases.

In each test case, there is an  7×21  ASCII image of the clock screen.

All digit segments are represented by two characters, and each colon segment is represented by one character. The character ''X'' indicates a segment that is on while ''.'' indicates anything else. See the sample input for details.
 

Output
For each test case, print a single line containing a string  t  in the format of  HH:MM , where  t(00:00t23:59) , denoting the time shown on the clock.
 

Sample Input
  
  
1 .XX...XX.....XX...XX. X..X....X......X.X..X X..X....X.X....X.X..X ......XX.....XX...XX. X..X.X....X....X.X..X X..X.X.........X.X..X .XX...XX.....XX...XX.
 

Sample Output
  
  
02:38
 


因为数字的位置是固定的,而且一个数字最多有七条线存在,所以我们只要每个数字判断七个位置就行了,然后再一一对应上去,为了使对应起来更方便,可以给七条边赋值,分别为1、2、4、8、16、32、64七个值,这样就不会有重复了,想赋别的也行,只要不要使不同的数字有相同的值就可以了,这样就可以得到十个数字对应的值为 119 , 36 , 93 , 109 , 46 , 107 , 123 , 37 , 127 , 111 ,然后在判断位置时加上相应的值就可以了。

#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
char mp[10][25];
int val[10] = {119,36,93,109,46,107,123,37,127,111};//每个数字所对应的值
int pos[5] = {1,6,13,18};
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        for(int i=0;i<7;i++)
            scanf("%s",mp[i]);
        int num[5];
        memset(num,0,sizeof num);
        for(int i=0;i<4;i++)
        {
            int h = 0;
            int l = pos[i];
            if(mp[h][l]=='X')
                num[i]+=1;
            if(mp[h+1][l-1]=='X')
                num[i]+=2;
            if(mp[h+1][l+2]=='X')
                num[i]+=4;
            if(mp[h+3][l]=='X')
                num[i]+=8;
            if(mp[h+4][l-1]=='X')
                num[i]+=16;
            if(mp[h+4][l+2]=='X')
                num[i]+=32;
            if(mp[h+6][l]=='X')
                num[i]+=64;
            for(int j=0;j<=9;j++)
                if(num[i]==val[j])
                    num[i] = j;
        }
        printf("%d%d:%d%d\n",num[0],num[1],num[2],num[3]);
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值