题目传送门:
计算器显示 | ||||||
|
||||||
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;
}