当前位置: 代码迷 >> 综合 >> HRBUST 1991 计算器显示【模拟】
  详细解决方案

HRBUST 1991 计算器显示【模拟】

热度:32   发布时间:2023-11-11 11:13:47.0

题目传送门:

计算器显示
Time Limit: 1000 MS Memory 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;
}