關鍵在於,單單輸出一個數字時很簡單,
但是一次輸出多個數字,就是同時處理多個數字。
也就是第一行要輸出每個數字的第一行,
二行要輸出每個數字的第二行。
所以算則就是這樣,
依照數字與行數做相對應輸出。
輸出的字元可以化簡為幾種:
(1)空白
(2)最右邊為「|」
(3)最左邊為「|」
(4)最左跟最右邊為「|」
(5)中間為「-」
/* ACM 706 LC-Display * mythnc * 2011/11/12 21:54:59 * run time: 0.032 */ #include <stdio.h> #define MAXCHAR 10 void printn(char, int, int); void space(int); void right(int); void middle(int); void left(int); void landr(int); int main(void) { char str[MAXCHAR]; int n, i, j; while (scanf("%d %s", &n, str) && n != 0) { for (i = 0; i < 2 * n + 3; i++) { /* line */ for (j = 0; str[j] != '\0'; j++) { /* number */ if (j > 0) putchar(' '); printn(str[j], i, n); } putchar('\n'); } putchar('\n'); } return 0; } /* printn: depend on row value and char c to do output */ void printn(char c, int row, int n) { int col, head, mid, tail; col = n + 2; head = 0; mid = (2 * n + 3) / 2; tail = 2 * n + 2; /* (2 * n + 3) - 1 */ switch (c) { case '1': if (row == head || row == mid || row == tail) space(col); else right(col); break; case '2': if (row == head || row == mid || row == tail) middle(col); else if (row < mid) right(col); else left(col); break; case '3': if (row == head || row == mid || row == tail) middle(col); else right(col); break; case '4': if (row == head || row == tail) space(col); else if (row < mid) landr(col); else if (row == mid) middle(col); else right(col); break; case '5': if (row == head || row == mid || row == tail) middle(col); else if (row < mid) left(col); else right(col); break; case '6': if (row == head || row == mid || row == tail) middle(col); else if (row < mid) left(col); else landr(col); break; case '7': if (row == head) middle(col); else if (row == mid || row == tail) space(col); else right(col); break; case '8': if (row == head || row == mid || row == tail) middle(col); else landr(col); break; case '9': if (row == head || row == mid || row == tail) middle(col); else if (row < mid) landr(col); else right(col); break; case '0': if (row == head || row == tail) middle(col); else if (row == mid) space(col); else landr(col); } } /* space: print ' ' */ void space(int n) { while (n--) putchar(' '); } /* right: print '|' in the rightmost */ void right(int n) { int i; for (i = 0; i < n - 1; i++) putchar(' '); putchar('|'); } /* middle: print '-' in middle */ void middle(int n) { int i; putchar(' '); for (i = 1; i < n - 1; i++) putchar('-'); putchar(' '); } /* left: print '|' in leftmost */ void left(int n) { int i; putchar('|'); for (i = 1; i < n; i++) putchar(' '); } /* landr: print '|' in leftmost and rightmost */ void landr(int n) { int i; putchar('|'); for (i = 1; i < n - 1; i++) putchar(' '); putchar('|'); }
沒有留言:
張貼留言