Bailian2745 顯示器
阿新 • • 發佈:2018-12-29
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; }