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;
}
浙公网安备 33010602011771号