zoukankan      html  css  js  c++  java
  • SDUST第十一次oj作业液晶显示问题

    Problem H: 液晶显示

    Time Limit: 1 Sec  Memory Limit: 32 MB
    Submit: 3246  Solved: 1594
    [Submit][Status][Web Board]

    Description

    你的朋友刚买了一台新电脑,他以前用过的最强大的计算工具是一台袖珍计算器。现在,看着自己的新电脑,他有点失望,因为他更喜欢计算器上的LC显示器。所以,你决定写一个LC显示风格的程序帮他在电脑上显示数字。

    Input

    输入包括若干行,每一行有两个整数。输入为两个0表示结束,并且此行不被处理。

    每行输入的两个整数s和n,满足1<=s<=10且0<=n<=99 999 999,其中n是要被现实的数字,s是n应该显示的大小(放大的倍数)。

    Output

    输出的数字是LC显示风格的:使用s个“-”表示水平线和s个“|”竖直线,每个数字刚好占据s+2列和2s+3行,所有没有“-”和“|”的空白处请用空格填满。并且每两个数字之间要有一列空格。

    每一行输入数字对应上述一组LC显示风格输出。任意两组数字的输出之间用一个空行分割。

    Sample Input

    2 123453 678900 0

    Sample Output

    -- -- -- | | | | | | | | | | | | -- -- -- -- | | | | | | | | | | -- -- -- --- --- --- --- --- | | | | | | | || | | | | | | || | | | | | | | --- --- --- | | | | | | | || | | | | | | || | | | | | | | --- --- --- ---

    HINT

    Append Code

    这个题目挺简单的,枚举每个数字,按字符串接收第二个数字,直接输出就可以了,枚举每个数字时由于打印方式是有规律的,所以可以先写几个函数,方便下面使用。感觉自己这样分十个数字代码太长了,有好方法请多多指教啦。
    下面是我的代码:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int qipan[40][150];
     
    void shu(int i, int k, int num)
    {
        int n = i + num;
        for(; i < n; i++)
            qipan[i][k] = -1;
    }
     
    void heng(int i, int k, int num)
    {
        intj;
        for(j = k + 1; j < k + num + 1; j++)
            qipan[i][j] = 1;
    }
     
    void deal(int n, int num, int k)
    {
        switch(n)
        {
        case0:
            shu(1, k, num);
            shu(num + 2, k, num);
            shu(1, k + num + 1, num);
            shu(num + 2, k + num + 1, num);
            heng(0, k, num);
            heng(2 * num + 2, k, num);
            break;
        case1:
            shu(1, k + num + 1, num);
            shu(num + 2, k + num + 1, num);
            break;
        case2:
            heng(0, k, num);
            heng(num + 1, k, num);
            heng(2 * num + 2, k, num);
            shu(1, k + num + 1, num);
            shu(num + 2, k, num);
            break;
        case3:
            heng(0, k, num);
            heng(num + 1, k, num);
            heng(2 * num + 2, k, num);
            shu(1, k + num + 1, num);
            shu(num + 2, k + num + 1, num);
            break;
        case4:
            shu(1, k, num);
            heng(num + 1, k, num);
            shu(1, k + num + 1, num);
            shu(num + 2, k + num + 1, num);
            break;
        case5:
            heng(0, k, num);
            heng(num + 1, k, num);
            heng(2 * num + 2, k, num);
            shu(1, k, num);
            shu(num + 2, k + num + 1, num);
            break;
        case6:
            shu(1, k, num);
            shu(num + 2, k, num);
            heng(0, k, num);
            heng(num + 1, k, num);
            heng(2 * num + 2, k, num);
            shu(num + 2, k + num + 1, num);
            break;
        case7:
            shu(1, k + num + 1, num);
            shu(num + 2, k + num + 1, num);
            heng(0, k, num);
            break;
        case8:
            shu(1, k, num);
            shu(num + 2, k, num);
            shu(1, k + num + 1, num);
            shu(num + 2, k + num + 1, num);
            heng(0, k, num);
            heng(num + 1, k, num);
            heng(2 * num + 2, k, num);
            break;
        case9:
            shu(1, k, num);
            shu(1, k + num + 1, num);
            shu(num + 2, k + num + 1, num);
            heng(0, k, num);
            heng(num + 1, k, num);
            heng(2 * num + 2, k, num);
            break;
        }
    }
     
    int main()
    {
        int num, temp = 0;
        char s[10];
        while(scanf("%d %s", &num, s) && num)
        {
            if(temp++)
                printf("
    ");
            memset(qipan, 0, sizeof(qipan));
            int i,j,k,n = strlen(s);
            for(i = 0, k = 0; i < n; i++, k += num + 2)
            {
                if(k != 0)
                    k++;
                deal(s[i] - '0', num, k);
            }
            for(i = 0; i < 2 * num + 3; i++)
            {
                for(j = 0; j < (num + 3) * n - 1; j++)
                {
                    if(qipan[i][j] == 0)
                        printf(" ");
                    elseif(qipan[i][j] == 1)
                        printf("-");
                    else
                        printf("|");
                }
                printf("
    ");
            }
        }
        return0;
    }




    版权声明:该博客版权归本人所有,若有意转载,请与本人联系
  • 相关阅读:
    初始化类的对象时代码的执行顺序
    非原子的 64 位操作
    守护线程
    Redis
    Redis
    Redis
    Redis
    好听美文随手记
    往服务器数据库插入数据报错,在本地数据库测试却无错误。
    关于云服务器中发送邮件,出现无法从传输连接中读取数据:
  • 原文地址:https://www.cnblogs.com/fan-jiaming/p/9440208.html
Copyright © 2011-2022 走看看