Problem H: 液晶显示
Time Limit: 1 Sec Memory Limit: 32 MBSubmit: 3052 Solved: 1477
[ Submit][ Status][ Web Board]
Description
你的朋友刚买了一台新电脑,他以前用过的最强大的计算工具是一台袖珍计算器。现在,看着自己的新电脑,他有点失望,因为他更喜欢计算器上的LC显示器。所以,你决定写一个LC显示风格的程序帮他在电脑上显示数字。
Input
输入包括若干行,每一行有两个整数。输入为两个0表示结束,并且此行不被处理。
每行输入的两个整数s和n,满足1<=s<=10且0<=n<=99 999 999,其中n是要被现实的数字,s是n应该显示的大小(放大的倍数)。
Output
输出的数字是LC显示风格的:使用s个“-”表示水平线和s个“|”竖直线,每个数字刚好占据s+2列和2s+3行,所有没有“-”和“|”的空白处请用空格填满。并且每两个数字之间要有一列空格。
每一行输入数字对应上述一组LC显示风格输出。任意两组数字的输出之间用一个空行分割。
Sample Input
2 123453 678900 0
Sample Output
-- -- -- | | | | | | | | | | | | -- -- -- -- | | | | | | | | | | -- -- -- --- --- --- --- --- | | | | | | | || | | | | | | || | | | | | | | --- --- --- | | | | | | | || | | | | | | || | | | | | | | --- --- --- ---
HINT
Append Code
#include <stdio.h>
#include <string.h>void out_put(char ch,int n)
{
int i;
for(i=0;i<n;i++)
putchar(ch);
}
char a[12][10]={"25152","14141","24232","24242","15241","23242","23252","24141","25252","25242","25152"};
int main()
{
int s,n,i,j,k; char str[20]; int flag=1;
while(scanf("%d %s",&s,str)&&(s||str[0]!='0')){
if(flag==0) printf("\n"); else flag=0;
for(i=0;i<5;i++)
{
int flag1=1;
for(k=0;k<s;k++)
{
for(j=0;str[j]!=0;j++)
{
if(a[str[j]-'0'][i]=='1')
{ if(k==0){
out_put(' ',s+2);
if(str[j+1]!=0) putchar(' ');
}
else flag1=0;
}
else if(a[str[j]-'0'][i]=='2')
{
if(k==0){
putchar(' ');
out_put('-',s);
putchar(' ');
if(str[j+1]!=0) putchar(' ');
}
else flag1=0;
}
else
{
if(a[str[j]-'0'][i]=='3')
{
putchar('|');
out_put(' ',s+1);
if(str[j+1]!=0) putchar(' ');
}
else if(a[str[j]-'0'][i]=='4')
{
out_put(' ',s+1);
putchar('|');
if(str[j+1]!=0) putchar(' ');
}
else if(a[str[j]-'0'][i]=='5')
{
putchar('|');
out_put(' ',s);
putchar('|');
if(str[j+1]!=0) putchar(' ');
}
}
}
if(flag1==1) printf("\n");
}
}
}
}