显示器 OpenJ_Bailian - 2745

该博客介绍了一个编程问题,目标是创建程序将电脑显示器上的数字显示为计算器风格。输入包含要显示的数及其尺寸,程序利用水平线段和垂直线段模拟数字,并确保正确间距和布局。博主分享了思路和代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

显示器 OpenJ_Bailian - 2745

描述
你的一个朋友买了一台电脑。他以前只用过计算器,因为电脑的显示器上显示的数字的样子和计算器是不一样,所以当他使用电脑的时候会比较郁闷。为了帮助他,你决定写一个程序把在电脑上的数字显示得像计算器上一样。

Input
输入包括若干行,每行表示一个要显示的数。每行有两个整数s和n (1 <= s <= 10, 0 <= n <= 99999999),这里n是要显示的数,s是要显示的数的尺寸。

如果某行输入包括两个0,表示输入结束。这行不需要处理。

Output
显示的方式是:用s个’-‘表示一个水平线段,用s个’|’表示一个垂直线段。这种情况下,每一个数字需要占用s+2列和2s+3行。另外,在两个数字之间要输出一个空白的列。在输出完每一个数之后,输出一个空白的行。注意:输出中空白的地方都要用空格来填充。

Sample Input
2 12345
3 67890
0 0

这里写图片描述

思路
简单的模拟,先用空格进行初始化,然后再对不同的数字进行不同的操作存储。注意细节,两个数字之间的空列,以及空行等等。。
下面是代码

#include <iostream> 
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <climits>
#include <cstring>
#include <string>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <vector>
#include <list>
#define rep(i,m,n) for(i=m;i<=n;i++)
#define rsp(it,s) for(set<int>::iterator it=s.begin();it!=s.end();it++)
const int inf_int = 2e9;
const long long inf_ll = 2e18;
#define inf_add 0x3f3f3f3f
#define mod 1000000007
#define vi vector<int>
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define pi acos(-1.0)
#define pii pair<int,int>
#define Lson L, mid, rt<<1
#define Rson mid+1, R, rt<<1|1
const int maxn=5e2+10;
using namespace std;

int main()
{
   char map[300][200];
   char s[10];
   int n,l,f,x;
  while(1)
  {
   memset(map,' ',sizeof(map));//初始化
   x=1;
   cin>>n;
   getchar();
   gets(s);
   if(n==0) return 0;
   l=strlen(s);
   for(int i=0;i<l;i++)    //不同的数字用不同的存储方法,将相应的字符存入map二维字符数组中
   {
      f=s[i]-'0';       
      if(f==0)
      {
            for(int j=x+1;j<x+n+1;j++)
            map[1][j]=map[2*n+3][j]='-';
            for(int j=2;j<2*n+3;j++)
            {
                if(j!=2+n)
                map[j][x]=map[j][x+n+1]='|';
            }
         x=x+3+n;   
      }
      else if(f==1)
      {
           for(int j=2;j<2*n+3;j++)
           {
             if(j!=2+n)
             map[j][x+n+1]='|';
           }
        x=x+3+n;     
      }
      else if(f==2)
      {
             for(int j=2;j<=n+1;j++)
             map[j][x+n+1]='|';
             for(int j=3+n;j<2*n+3;j++)
             map[j][x]='|';
             for(int j=x+1;j<x+n+1;j++)
             map[1][j]=map[2+n][j]=map[2*n+3][j]='-';
             x=x+3+n;  
       } 
       else if(f==3)
       {
             for(int j=x+1;j<x+n+1;j++)
             map[1][j]=map[2+n][j]=map[2*n+3][j]='-';
             for(int j=2;j<2*n+3;j++)
             {
             if(j!=2+n)
             map[j][x+n+1]='|';
             }
              x=x+3+n; 
       }
       else if(f==4)
       {
           for(int j=x+1;j<=x+n;j++)
             map[2+n][j]='-';
             for(int j=2;j<2*n+3;j++)
             {
             if(j!=2+n)
             map[j][x+n+1]='|';
             }
             for(int j=2;j<=n+1;j++)
             map[j][x]='|';
              x=x+3+n;
       }
       else if(f==5)
       {
           for(int j=x+1;j<x+n+1;j++)
            map[1][j]=map[2+n][j]=map[2*n+3][j]='-';
            for(int j=2;j<=1+n;j++)
            map[j][x]='|';
            for(int j=3+n;j<2*n+3;j++)
            map[j][x+n+1]='|';
             x=x+3+n;
       }
       else if(f==6)
       {
          for(int j=2;j<2*n+3;j++)
           {
             if(j!=2+n)
             map[j][x]='|';
           }
          for(int j=3+n;j<2*n+3;j++)
            map[j][x+n+1]='|';
           for(int j=x+1;j<x+n+1;j++)
            map[1][j]=map[2+n][j]=map[2*n+3][j]='-';
             x=x+3+n;
       }
       else if(f==7)
       {

            for(int j=x+1;j<x+n+1;j++)
            map[1][j]='-';
           for(int j=2;j<2*n+3;j++)
           {
             if(j!=2+n)
             map[j][x+n+1]='|';
           }
           x=x+3+n;  
       }
       else if(f==8)
       {
            for(int j=2;j<2*n+3;j++)
            {
                if(j!=2+n)
                map[j][x]=map[j][x+n+1]='|';
            }
             for(int j=x+1;j<x+n+1;j++)
            map[1][j]=map[2+n][j]=map[2*n+3][j]='-';
             x=x+3+n;
       }
       else if(f==9)
       {
            for(int j=2;j<=n+1;j++)
             map[j][x]='|';
           for(int j=2;j<2*n+3;j++)
           {
             if(j!=2+n)
             map[j][x+n+1]='|';
           }
            for(int j=x+1;j<x+n+1;j++)
            map[1][j]=map[2+n][j]=map[2*n+3][j]='-';
             x=x+3+n;
       }
   }
   for(int i=1;i<=2*n+3;i++)  //输出
   {
      for(int j=1;j<=x;j++)
      printf("%c",map[i][j]);
      printf("\n");
   }
   cout<<endl;
  }
   return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值