1. 程式人生 > >Bailian2745 顯示器

Bailian2745 顯示器

2745:顯示器
總時間限制: 1000ms 記憶體限制: 65536kB
描述
你的一個朋友買了一臺電腦。他以前只用過計算器,因為電腦的顯示器上顯示的數字的樣子和計算器是不一樣,所以當他使用電腦的時候會比較鬱悶。為了幫助他,你決定寫一個程式把在電腦上的數字顯示得像計算器上一樣。
輸入
輸入包括若干行,每行表示一個要顯示的數。每行有兩個整數s和n (1 <= s <= 10, 0 <= n <= 99999999),這裡n是要顯示的數,s是要顯示的數的尺寸。

如果某行輸入包括兩個0,表示輸入結束。這行不需要處理。
輸出
顯示的方式是:用s個'-'表示一個水平線段,用s個'|'表示一個垂直線段。這種情況下,每一個數字需要佔用s+2列和2s+3行。另外,在兩個數字之間要輸出一個空白的列。在輸出完每一個數之後,輸出一個空白的行。注意:輸出中空白的地方都要用空格來填充。
樣例輸入


2 12345
3 67890
0 0
樣例輸出
-- -- --
| | | | | |
| | | | | |
-- -- -- --
| | | | |
| | | | |
-- -- --


| | | | | | | |
| | | | | | | |
| | | | | | | |
--- --- ---
| | | | | | | |
| | | | | | | |
| | | | | | | |
--- --- --- ---
提示
數字(digit)指的是0,或者1,或者2……或者9。
數(number)由一個或者多個數字組成。

問題連結Bailian2745 顯示器
問題描述

:(略)
問題分析
    這個問題與參考連結是同一個問題,不解釋。
程式說明:(略)
參考連結UVALive5642 UVa706 HDU1332 POJ1102 LC-Display
題記:(略)。

AC的C語言程式如下:

/* UVALive5642 UVa706 HDU1332 POJ1102 LC-Display */

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

string typematrix[10][5] = {
    {
        " - ",
        "| |",
        "   ",
        "| |",
        " - "
    },
    {
        "   ",
        "  |",
        "   ",
        "  |",
        "   "
    },
    {
        " - ",
        "  |",
        " - ",
        "|  ",
        " - "
    },
    {
        " - ",
        "  |",
        " - ",
        "  |",
        " - "
    },
    {
        "   ",
        "| |",
        " - ",
        "  |",
        "   "
    },
    {
        " - ",
        "|  ",
        " - ",
        "  |",
        " - "
    },
    {
        " - ",
        "|  ",
        " - ",
        "| |",
        " - "
    },
    {
        " - ",
        "  |",
        "   ",
        "  |",
        "   "
    },
    {
        " - ",
        "| |",
        " - ",
        "| |",
        " - "
    },
    {
        " - ",
        "| |",
        " - ",
        "  |",
        " - "
    }
};

int getrow(int row, int multiple)
{
    if(row == 0)
        return 0;   // 第1行
    else if(row < multiple + 1)
        return 1;   // 第2行
    else if(row == multiple + 1)
        return 2;   // 第3行
    else if(row == 2 * multiple + 2)
        return 4;   // 第5行
    else
        return 3;   // 第4行
}

void zoom(string& s, int n)
{
    printf("%c",s[0]);
    for(int i=0; i<n; i++) {
        printf("%c", s[1]);
    }
    printf("%c", s[2]);
}

int main()
{
    int n;
    char s[100];

    while(scanf("%d%s", &n, s) != EOF && n) {
        for(int i=0; i<2*n+3; i++) {                // 行控制
            for(int j=0; j<(int)strlen(s); j++) {     // 列控制
                if(j != 0)
                    printf(" ");
                zoom(typematrix[s[j] - '0'][getrow(i, n)], n);
            }
            printf("\n");
        }
        printf("\n");
    }

    return 0;
}