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.
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(1≤T≤1440)
, 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.
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:00≤t≤23: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;
}