HRBUST 1991 计算器显示【模拟】

题目传送门:

计算器显示
Time Limit: 1000 MSMemory Limit: 32768 K
Total Submit: 97(45 users)Total Accepted: 42(40 users)Rating:Special Judge: No
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;
}






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值