POJ_1102 LC-Display
問題
数字と表示サイズがあたえられるので、電卓とかのディスプレイ風にして出力せよ。
例)
INPUT:
2 12345
3 67890
0 0
OUTPUT:
-- -- -- | | | | | | | | | | | | -- -- -- -- | | | | | | | | | | -- -- -- --- --- --- --- --- | | | | | | | | | | | | | | | | | | | | | | | | --- --- --- | | | | | | | | | | | | | | | | | | | | | | | | --- --- --- ---
解法
テーブル作ると便利。
#include <cstdio> #include <cstring> using namespace std; char num[50]; int m_len; //numの文字列の長さ int S; const char N[10][7] = { {1,0,1,1,1,1,1}, //0 {0,0,0,0,1,0,1}, //1 {1,1,1,0,1,1,0}, //2 {1,1,1,0,1,0,1}, //3 {0,1,0,1,1,0,1}, //4 {1,1,1,1,0,0,1}, //5 {1,1,1,1,0,1,1}, //6 {1,0,0,0,1,0,1}, //7 {1,1,1,1,1,1,1}, //8 {1,1,1,1,1,0,1} //9 }; void print_H(int p, int n){ // '-'を表示しよう printf(" "); for(int j = 0; j < S; j++){ if(N[n][p] == 1) printf("-"); else printf(" "); } printf(" "); } void print_V(int p, int n){ // '|'を表示しよう if(N[n][p] == 1) printf("|"); else printf(" "); for(int i = 0; i < S; i++) printf(" "); if(N[n][p+1] == 1) printf("|"); else printf(" "); } int main(){ int m; while(scanf("%d %d", &S, &m) && S){ sprintf(num, "%d", m); m_len = strlen(num); for(int i = 0; i < 2 * S + 3; i++){ for(int p = 0; p < m_len; p++){ int t = num[p] - '0'; //表示しようとする数 if(i == 0) print_H(0, t); else if(i == S + 1) print_H(1, t); else if(i == 2 * S + 2) print_H(2, t); else{ if(0<i && i<S+1) print_V(3, t); else print_V(5, t); } printf(" "); } printf("\n"); } printf("\n"); } return 0; }