Problem H: 液晶显示
Time Limit: 1 Sec Memory Limit: 32 MBSubmit: 3246 Solved: 1594
[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 <stdlib.h>
#include <string.h>
int qipan[40][150];
void shu(int i, int k, int num)
{
int n = i + num;
for(; i < n; i++)
qipan[i][k] = -1;
}
void heng(int i, int k, int num)
{
intj;
for(j = k + 1; j < k + num + 1; j++)
qipan[i][j] = 1;
}
void deal(int n, int num, int k)
{
switch(n)
{
case0:
shu(1, k, num);
shu(num + 2, k, num);
shu(1, k + num + 1, num);
shu(num + 2, k + num + 1, num);
heng(0, k, num);
heng(2 * num + 2, k, num);
break;
case1:
shu(1, k + num + 1, num);
shu(num + 2, k + num + 1, num);
break;
case2:
heng(0, k, num);
heng(num + 1, k, num);
heng(2 * num + 2, k, num);
shu(1, k + num + 1, num);
shu(num + 2, k, num);
break;
case3:
heng(0, k, num);
heng(num + 1, k, num);
heng(2 * num + 2, k, num);
shu(1, k + num + 1, num);
shu(num + 2, k + num + 1, num);
break;
case4:
shu(1, k, num);
heng(num + 1, k, num);
shu(1, k + num + 1, num);
shu(num + 2, k + num + 1, num);
break;
case5:
heng(0, k, num);
heng(num + 1, k, num);
heng(2 * num + 2, k, num);
shu(1, k, num);
shu(num + 2, k + num + 1, num);
break;
case6:
shu(1, k, num);
shu(num + 2, k, num);
heng(0, k, num);
heng(num + 1, k, num);
heng(2 * num + 2, k, num);
shu(num + 2, k + num + 1, num);
break;
case7:
shu(1, k + num + 1, num);
shu(num + 2, k + num + 1, num);
heng(0, k, num);
break;
case8:
shu(1, k, num);
shu(num + 2, k, num);
shu(1, k + num + 1, num);
shu(num + 2, k + num + 1, num);
heng(0, k, num);
heng(num + 1, k, num);
heng(2 * num + 2, k, num);
break;
case9:
shu(1, k, num);
shu(1, k + num + 1, num);
shu(num + 2, k + num + 1, num);
heng(0, k, num);
heng(num + 1, k, num);
heng(2 * num + 2, k, num);
break;
}
}
int main()
{
int num, temp = 0;
char s[10];
while(scanf("%d %s", &num, s) && num)
{
if(temp++)
printf("
");
memset(qipan, 0, sizeof(qipan));
int i,j,k,n = strlen(s);
for(i = 0, k = 0; i < n; i++, k += num + 2)
{
if(k != 0)
k++;
deal(s[i] - '0', num, k);
}
for(i = 0; i < 2 * num + 3; i++)
{
for(j = 0; j < (num + 3) * n - 1; j++)
{
if(qipan[i][j] == 0)
printf(" ");
elseif(qipan[i][j] == 1)
printf("-");
else
printf("|");
}
printf("
");
}
}
return0;
}