UVALive5642 UVa706 HDU1332 LC-Display【打印图案】
Regionals 1999 >> Europe - Mid-Central
Regionals 1999 >> Europe - Southwestern
问题链接:UVALive5642 UVa706 HDU1332 LC-Display。
问题描述:参见上文。
问题分析:
首先需要一个字模数组,然后进行放大。
每行有多个字,同时需要考虑放大后行数会增加。
需要注意,每组数据后有一个空行,每个数字之间有一个空格(最后一个数字后面没有空格。这是特殊的地方,需要注意)。程序说明:
(略)
参考链接:(略)
AC的C++语言程序:
/* UVALive5642 UVa706 HDU1332 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; }