問題描述
你的一個朋友買了一臺電腦酥泛。他以前只用過計(jì)算器,因?yàn)殡娔X的顯示器上顯示的數(shù)字的樣子和計(jì)算器是不一樣,所以當(dāng)他使用電腦的時候會比較郁悶贩汉。為了幫助他,你決定寫一個程序把在電腦上的數(shù)字顯示得像計(jì)算器上一樣植榕。
輸入
輸入包括若干行,每行表示一個要顯示的數(shù)。每行有兩個整數(shù) s 和 n (1 <= s <= 10, 0 <=n <= 99999999),這里 n 是要顯示的數(shù),s 是要顯示的數(shù)的尺寸坯认。 如果某行輸入包括兩個 0,表示輸入結(jié)束。這行不需要處理矛双。
輸出
顯示的方式是:用 s 個'-'表示一個水平線段,用 s 個'|'表示一個垂直線段。這種情況下,每一個數(shù)字需要占用 s+2 列和 2s+3 行仓坞。另外,在兩個數(shù)字之間要輸出一個空白的列背零。在輸出完每一個數(shù)之后,輸出一個空白的行。注意:輸出中空白的地方都要用空格來填充无埃。
輸入樣列
2 12345
3 67890
0 0
輸出樣例
-- -- --
| | | | | |
| | | | | |
-- -- -- --
| | | | |
| | | | |
-- -- --
--- --- --- --- ---
| | | | | | | |
| | | | | | | |
| | | | | | | |
--- --- ---
| | | | | | | |
| | | | | | | |
| | | | | | | |
--- --- --- ---
算法實(shí)現(xiàn)
using System;
namespace Questions{
class Program{
public static void Main(string[] args){
while (true){
string input = Console.ReadLine();
string[] data = input.Split();
int s = int.Parse(data[0]);
int k = int.Parse(data[1]);
if (s == 0 && k == 0)
break;
int l = data[1].Length;
int[,] num = new int[2 * s + 3,(s + 2) * l+l-1];
for (int i = 0; i < l; i++) {
char temp = data[1][i];
switch (temp) {
case '0':
{
for (int m = 0; m < 2 * s + 3; m++)
if (m != 0 && m != s + 1 && m != 2 * s + 2)
{
num[m, (s + 2) * (i + 1) + i - 1] = 2;
num[m, (s + 2) * i + i] = 2;
}
for (int n = (s + 2) * i + 1 + i; n < (s + 2) * (i + 1) - 1 + i; n++)
{
num[0, n] = 1;
num[2 * s + 2, n] = 1;
}
break;
}
case '1':
{
for (int m = 0;m<2*s+3;m++)
if (m != 0 && m != s + 1 && m != 2 * s + 2)
num[m,(s + 2) * (i + 1) - 1 + i] = 2;
break;
}
case '2':
{
for (int n = (s + 2) * i+1 + i; n < (s + 2) * (i + 1)-1+i; n++)
{
num[0,n] = 1;
num[ s + 1,n] = 1;
num[2 * s + 2,n] = 1;
}
for (int m = 1; m <= s ; m++)
num[m,(s + 2) * (i + 1) - 1 + i] = 2;
for (int m = s+2; m < 2*s+2; m++)
num[m,(s + 2) * i + i] = 2;
break;
}
case '3':
{
for (int m = 0; m < 2 * s + 3; m++)
if (m != 0 && m != s + 1 &&m !=2 * s + 2)
num[m,(s + 2) * (i + 1) - 1 + i] = 2;
for (int n = (s + 2) * i+1 + i; n < (s + 2) * (i + 1)-1+i; n++)
{
num[0,n] = 1;
num[s + 1,n] = 1;
num[2 * s + 2,n] = 1;
}
break;
}
case '4':
{
for (int m = 0; m < 2 * s + 3; m++)
if (m != 0 && m != s + 1 && m != 2 * s + 2)
num[m,(s + 2) * (i + 1) - 1 + i] = 2;
for (int n = (s + 2) * i+1 + i; n < (s + 2) * (i + 1)-1+i; n++)
num[s + 1,n] = 1;
for (int m = 1; m <= s; m++)
num[m,(s + 2) * i + i] = 2;
break;
}
case '5':
{
for (int m = 1; m <= s; m++)
if (m != s + 1)
num[m,(s + 2) * i + i] = 2;
for (int n = (s + 2) * i+1 + i; n < (s + 2) * (i + 1)-1+i; n++)
{
num[0, n] = 1;
num[s + 1, n] = 1;
num[2 * s + 2, n] = 1;
}
for (int m = s+2; m < 2 * s + 2; m++)
if (m != 0 && m != s + 1 && m != 2 * s + 2)
num[m,(s + 2) * (i + 1) - 1 + i] = 2;
break;
}
case '6':
{
for (int m = 0; m < 2 * s + 3; m++)
if (m != 0 && m != s + 1 && m != 2 * s + 2)
num[m,(s + 2) * i + i] = 2;
for (int n = (s + 2) * i+1 + i; n < (s + 2) * (i + 1)-1+i; n++)
{
num[0, n] = 1;
num[s + 1, n] = 1;
num[2 * s + 2, n] = 1;
}
for (int m = s + 2; m < 2 * s + 2; m++)
if (m != 0 && m != s + 1 && m != 2 * s + 2)
num[m,(s + 2) * (i + 1) - 1 + i] = 2;
break;
}
case '7':
{
for (int n = (s + 2) * i+1 + i; n < (s + 2) * (i + 1)-1+i; n++)
num[ 0,n] = 1;
for (int m = 0; m < 2 * s + 3; m++)
{
if (m != 0 && m != s + 1 && m != 2 * s + 2)
num[m,(s + 2) * (i + 1) - 1 + i] = 2;
}
break;
}
case '8':
{
for (int m = 0; m < 2 * s + 3; m++)
if (m != 0 && m != s + 1 && m != 2 * s + 2)
num[m,(s + 2) * (i + 1) - 1 + i] = 2;
for (int n = (s + 2) * i+1 + i; n < (s + 2) * (i + 1)-1+i; n++)
{
num[0, n] = 1;
num[s + 1, n] = 1;
num[2 * s + 2, n] = 1;
}
for (int m = 0; m < 2 * s + 3; m++)
if (m != 0 && m != s + 1 && m != 2 * s + 2)
num[m,(s + 2) * i + i] = 2;
break;
}
case '9':
{
for (int m = 0; m < 2 * s + 3; m++)
if (m != 0 && m != s + 1 && m != 2 * s + 2)
num[m,(s + 2) * (i + 1) - 1 + i] = 2;
for (int n = (s + 2) * i+1 + i; n < (s + 2) * (i + 1)-1+i; n++)
{
num[0, n] = 1;
num[s + 1, n] = 1;
num[2 * s + 2, n] = 1;
}
for (int m = 1; m <= s; m++)
num[m,(s + 2) * i + i] = 2;
break;
}
}
}
for (int n = 0; n < 2 * s + 3; n++)
{
for (int m = 0; m < (s + 2) * l + l - 1; m++)
if(num[n,m]==1)
Console.Write("-");
else if(num[n, m] == 2)
Console.Write("|");
else
Console.Write(" ");
Console.WriteLine();
}
Console.WriteLine();
}
Console.ReadKey();
}
}
}