close
Content

你的一個朋友最近買了一部新電腦,在這之前,他只用過口袋型計算機。現在他對這新電腦有點失望,因為他非常喜歡以前計算機顯示數字的樣式,而不是像現在新電腦所顯示的。所以你的任務是寫一個程式幫他把數字以計算機上數字的樣式顯現出來。

Input

每筆測試資料一列。每列有2個整數s,n(1 <= s <= 10, 0 <= n <= 99999999)。n是要顯示的數字,s是每個字要求的大小。s=0, n=0代表輸入結束。

Output

請以計算機的數字樣式,並以s的大小顯示n。這些計算機數字是以'-'當作水平線,以'|'當作垂直線所構成,並且每個數字的大小寬為s+2,高為2s+3。數字0~9的樣式請參考Sample Outpu,請注意:在2個數字中間有一空白行。

每組測試資料後亦請空一列。

Sample Input #1
1 0123456789
2 12345
3 67890

Sample Output #1
 -       -   -       -   -   -   -   - 
| |   |   |   | | | |   |     | | | | |
         -   -   -   -   -       -   - 
| |   | |     |   |   | | |   | | |   |
 -       -   -       -   -       -   - 

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

 ---   ---   ---   ---   --- 
|         | |   | |   | |   |
|         | |   | |   | |   |
|         | |   | |   | |   |
 ---         ---   ---       
|   |     | |   |     | |   |
|   |     | |   |     | |   |
|   |     | |   |     | |   |
 ---         ---   ---   --- 
測資資訊:
記憶體限制: 512 MB
公開 測資點#0 (100%): 1.0s , <1K

以下參考 https://yuihuang.com/zj-c135/

python:

g = [
    [[0, 1, 0], [1, 0, 1], [0, 0, 0], [1, 0, 1], [0, 1, 0]], #0
    [[0, 0, 0], [0, 0, 1], [0, 0, 0], [0, 0, 1], [0, 0, 0]], #1
    [[0, 1, 0], [0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 0]], #2
    [[0, 1, 0], [0, 0, 1], [0, 1, 0], [0, 0, 1], [0, 1, 0]], #3
    [[0, 0, 0], [1, 0, 1], [0, 1, 0], [0, 0, 1], [0, 0, 0]], #4
    [[0, 1, 0], [1, 0, 0], [0, 1, 0], [0, 0, 1], [0, 1, 0]], #5
    [[0, 1, 0], [1, 0, 0], [0, 1, 0], [1, 0, 1], [0, 1, 0]], #6
    [[0, 1, 0], [0, 0, 1], [0, 0, 0], [0, 0, 1], [0, 0, 0]], #7
    [[0, 1, 0], [1, 0, 1], [0, 1, 0], [1, 0, 1], [0, 1, 0]], #8
    [[0, 1, 0], [1, 0, 1], [0, 1, 0], [0, 0, 1], [0, 1, 0]], #9
]
while True:
    s,n=map(str,input().split())
    s=int(s)
    if s ==0:break
    for i in range(5): #跑第0,1,2,3,4行

        if i%2==1: #若為1,3行,要印"|"
            #奇數行,先印"|"或空格,在印幾個空格,在印"|"或空格
            for l in range(s): #s為要印的倍數大小
                for j in range(len(n)): #要印幾個數字
                    if g[int(n[j])][i][0]==1: #三圍陣列[數字][第幾行][左邊列]
                        print("|", end="")
                    else:
                        print(" ", end="")
                    
                    for k in range(s):
                        print(" ", end="")
                    """-------------------------------------------------------"""
                    if g[int(n[j])][i][2]==1: #三圍陣列[數字][第幾行][右邊列]
                        print("|", end="")
                    else:
                        print(" ", end="")
                    """-------------------------------------------------------"""  
                    print(" ",end="")
                print()#換行

        else:#若為0,2,4行,要印"-"
            #偶數行,先印一個空格,在印幾條"-",在印空格
            for j in range(len(n)): #要印幾個數字
                print(" ", end="")
                """-------------------------------------------------------"""  
                for k in range(s): #s為要印的倍數大小
                    if g[int(n[j])][i][1]:
                        print("-", end="")
                    else:
                        print(" ", end="")
                print(" ", end="")#印右邊的空格
                print(" ", end="")#印數字中間的空格

            print()




                    
                    
                

C++:

#include <iostream>
using namespace std;
 
int main() {
    int g[10][5][3] = {
        {0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0}, //0
        {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0}, //1
        {0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0}, //2
        {0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0}, //3
        {0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0}, //4
        {0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0}, //5
        {0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0}, //6
        {0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0}, //7
        {0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0}, //8
        {0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0}, //9
    };
    string n;
    int s;
    while (cin >> s >> n){
        if (s == 0) break;

        for (int i = 0; i < 5; i++){//每一個數字都分成五行去印
            if (i % 2==1){//偶數行(先判斷印"|"或空格 => 在印幾個空格 => 再判斷印"|"或空格)
                for (int l = 0; l < s; l++){ //s為倍數
                    for (int j = 0; j < n.size(); j++){ //n為字數
						
						//判斷印"|"或空格
                        if (g[n[j] - '0'][i][0]) cout << "|"; // g[n[j] - '0']=>第幾個數字 eg:'1'-'0'=1
                        else cout << " ";

						//印幾個空格
                        for (int k = 0; k < s; k++){
                            cout << " ";
                        }

						//再判斷印"|"或空格
                        if (g[n[j] - '0'][i][2]) cout << "|";
                        else cout << " ";

                        cout << " ";//在2個數字中間有一空白行。
                    }
                    cout << "\n"; //全部輸出,換行
                }
            } else { //奇數行(先印一個空格 => 判斷印"|"或空格 => 在印一個空格 =>數字跟數字中間的空格)
				//先印一個空格
                for (int j = 0; j < n.size(); j++){
                    cout << " ";

					//判斷印"|"或空格
                    for (int k = 0; k < s; k++){
                        if (g[n[j] - '0'][i][1]) cout << "-";
                        else cout << " ";
                    }

                    cout << " ";//在印一個空格
                    cout << " ";//數字跟數字中間的空格。
                }
                cout << "\n";
            }
        }
    }
}
arrow
arrow
    創作者介紹
    創作者 趴趴熊日常 的頭像
    趴趴熊日常

    資工趴趴熊的小天地

    趴趴熊日常 發表在 痞客邦 留言(0) 人氣()