zoukankan      html  css  js  c++  java
  • HNUSTOJ-1600 BCD时钟

    1600: BCD时钟

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 1038  解决: 156
    [提交][状态][讨论版]

    题目描述

     BCD码是指用四位二进制数来表示十进制数中的0~9这十个数字的编码形式,常见的是8421码表如下:

    十进制  二进制 

    0 0000
    1 0001
    2 0010
    3 0011
    4 0100
    5 0101
    6 0110
    7 0111
    8 1000
    9 1001
     
     
    现在我们用BCD码表示一个时钟.时钟由13个LED灯组成(见图), 灯1和2表示小时的第一个数字,灯3-6表示小时的第二个数字.灯7-9表示分钟的第一个数字,灯10-13表示分钟的第二个数字.注意,小时的第一个数字和分钟的第一个数字并没有用足四位二进制是因为已经足够表达相关信息了,详见样例.
    时钟是24小时制的,规定从00:00到24:00, 24:00和0:00均为正确时刻.
    例如: 灯1,3,7,10和12亮表示时刻11:15, 因为灯1亮表示小时的第一个数字是1,灯3亮表示小时的第二个数字也是1.灯7亮表示分钟的第一个数字是1,灯10和12亮表示分钟的第二个数字是1+4=5.
     
    我们问题是,给定时钟的BCD时刻, 求出对应的十进制时刻.

    输入

     由多组测试数据组成.每组数据一行,包括一个0和1组成的,长度为13的字符串,从左至右对应灯1-13. 1表示灯亮,0表示灯熄灭.

    输出

     每组测试数据输出一行.如果数据有误,输出"Error", 否则输出对应时刻.见样例.

    样例输入

    0111001011001
    1000000000000
    1000000000010
    0100001000100
    0010000010010
    1100011000011
    1111111111111
    0011000100100
    1010000000110
    1010000000100
    

    样例输出

    23:59
    10:00
    10:04
    20:12
    01:44
    Error
    Error
    03:22
    11:06
    11:02
    直接按照题意模拟就行了,要注意的是24:00是合法的,但是24:01是不合法的,因为这个WA了一次
    #include<iostream>
    #include<cstring>
    #include<cstdio>
     
    using namespace std;
    #define lx( c ) ((c)-('0'))
    char ch[25];
     
     
    void tran(int &a, int &b, int &c, int &d){
        a = lx(ch[0]) + lx(ch[1])*2;
        b = lx(ch[2]) + lx(ch[3])*2 + lx(ch[4])*4 + lx(ch[5])*8;
        c = lx(ch[6]) + lx(ch[7])*2 + lx(ch[8])*4;
        d = lx(ch[9]) + lx(ch[10])*2 + lx(ch[11])*4 + lx(ch[12])*8;
    }
     
    void Solve_question(){
        int a, b, c, d;
        tran(a, b, c, d);
        bool flag = true;
        if(a*10 + b > 24 || c * 10 + d > 59) flag = false;
        if(a > 3 || b > 9 || c > 5 || d > 9) flag = false;
        if(a*10 + b == 24 && c*10 + d > 0) flag = false;
        if( !flag ) printf("Error
    ");
        else printf("%d%d:%d%d
    ", a, b, c, d);
    }
    int main(){
        while(scanf("%s", ch) == 1){
            int len = strlen(ch);
            if(len != 13) { printf("Error
    "); continue; }
            Solve_question();
        }
    }
  • 相关阅读:
    c# 使用Selenium模拟登录和操作数据的学习记录【续】
    c# 使用Selenium模拟登录和操作数据的学习记录
    使用bat一键安装mysql
    使用c#程序 添加iis网站目录的用户权限
    NOIp游记
    线规集合
    背包规划集合
    阴间扫描线
    11.30数学集合
    高精度运算
  • 原文地址:https://www.cnblogs.com/Pretty9/p/7406592.html
Copyright © 2011-2022 走看看