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;
}




版权声明:该博客版权归本人所有,若有意转载,请与本人联系
原文地址:https://www.cnblogs.com/fan-jiaming/p/9440208.html