题目传送门:
计算器显示 | ||||||
| ||||||
Description | ||||||
童鞋们一定都用过计算器,不知道你们有没有注意到它屏幕上数字的显示,每个数字是一些“-”或者“|”组成的,那么这个题就需要大家使用这种显示方法表示出一串数字,当然我们不会简单的像计算器上那样,每个部分都由一个“-”或者“|”组成,这里我想要使用n个'-'或'|'显示每个数字,你能帮助我么? | ||||||
Input | ||||||
本题有多组测试数据,每组数据占一行,每行有一个数字n和字符串s,n代表数字的某部分由几个“-”或者“|”组成,s为所需要表示出来的数字串(0<n<=10, s长度不超过10) | ||||||
Output | ||||||
每组数据输出占一行,分别按要求表示出数字串中的数字,每两个数字间有空格,每组数据后有一个空行。。 | ||||||
Sample Input | ||||||
3 01234 2 56789 | ||||||
Sample Output | ||||||
--- --- --- | | | | | | | | | | | | | | | | | | | | | --- --- --- | | | | | | | | | | | | | | | | | | --- --- --- -- -- -- -- -- | | | | | | | | | | | | | | -- -- -- -- | | | | | | | | | | | | | | -- -- -- -- | ||||||
Hint | ||||||
本题可以以8为基础来理解,N即为每个数字的每笔画的“|”或者“—”个数,详情请看样例 | ||||||
Source | ||||||
2014 Winter Holiday Contest 1 | ||||||
Author | ||||||
cyh@hrbust |
模拟模拟模拟。模拟的我头疼。。。。。。。
注意下就是,两个数字之间有空格。每组数据之后有换行。其他就没啥了
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int n;
char test[50][2000];
void shu(int x2,int y2)
{
for(int i=x2; i<x2+n; i++)
{
test[i][y2]='|';
}
}
void heng(int x2,int y2)
{
for(int i=y2; i<y2+n; i++)
{
test[x2][i]='-';
}
}
void draw(int num,int x,int y)
{
// printf("num==%d\n",num);
if(num==0)
{
// printf("0\n");
heng(x,y+1);
heng(x+2*n+2,y+1);
shu(x+1,y);
shu(x+n+2,y);
shu(x+1,y+n+1);
shu(x+2+n,y+n+1);
}
else if(num==8)
{
// printf("8\n");
heng(x,y+1);
heng(x+2*n+2,y+1);
shu(x+1,y);
shu(x+n+2,y);
shu(x+1,y+n+1);
shu(x+2+n,y+n+1);
heng(x+n+1,y+1);
}
else if(num==9)
{
// printf("9\n");
heng(x,y+1);
heng(x+2*n+2,y+1);
shu(x+1,y);
shu(x+1,y+n+1);
shu(x+2+n,y+n+1);
heng(x+n+1,y+1);
}
else if(num==7)
{
// printf("7\n");
heng(x,y+1);
shu(x+1,y+n+1);
shu(x+2+n,y+n+1);
}
else if(num==6)
{
// printf("6\n");
heng(x,y+1);
heng(x+2*n+2,y+1);
shu(x+1,y);
shu(x+n+2,y);
shu(x+2+n,y+n+1);
heng(x+n+1,y+1);
}
else if(num==5)
{
// printf("5\n");
heng(x,y+1);
heng(x+2*n+2,y+1);
shu(x+1,y);
shu(x+2+n,y+n+1);
heng(x+n+1,y+1);
}
else if(num==4)
{
// printf("4\n");
shu(x+1,y);
shu(x+1,y+n+1);
shu(x+2+n,y+n+1);
heng(x+n+1,y+1);
}
else if(num==3)
{
// printf("3\n");
heng(x,y+1);
heng(x+2*n+2,y+1);
shu(x+1,y+n+1);
shu(x+2+n,y+n+1);
heng(x+n+1,y+1);
}
else if(num==2)
{
// printf("2\n");
heng(x,y+1);
heng(x+2*n+2,y+1);
shu(x+1,y+n+1);
shu(x+n+2,y);
heng(x+n+1,y+1);
}
else if(num==1)
{
// printf("1\n");
shu(x+1,y+n+1);
shu(x+2+n,y+n+1);
}
}
int main()
{
char s[10];
while(~scanf("%d %s",&n,&s))
{
memset(test,' ',sizeof(test));
int x=0;
int y=0;
int len=strlen(s);
for(int i=0; i<len; i++)
{
// printf("s[%d]==%c\n",i,s[i]);
draw(s[i]-'0',x,y);
x=0;
y=y+n+3;
}
int c=len*(n+2)+len-1;
int h=n*2+3;
for(int i=0;i<h;i++)
{
test[i][c]='\0';
}
for(int i=0; i<h; i++)
{
printf("%s\n",test[i]);
}
printf("\n");
}
return 0;
}