被gank的openjudge2745
来源:互联网 发布:大数金科网络 编辑:程序博客网 时间:2024/06/05 11:57
C++实验的一道题,有点复杂的模拟,思路很简单,但是在我校oj上一直过不了,连个PE都不给我,害的我dubug了好久,然后去poj上交了,ac,,,莫非是数据的锅。。
传送门:http://bailian.openjudge.cn/practice/2745/
总时间限制:
1000ms
内存限制:
65536kB
描述
你的一个朋友买了一台电脑。他以前只用过计算器,因为电脑的显示器上显示的数字的样子和计算器是不一样,所以当他使用电脑的时候会比较郁闷。为了帮助他,你决定写一个程序把在电脑上的数字显示得像计算器上一样。
输入
输入包括若干行,每行表示一个要显示的数。每行有两个整数s和n (1 <= s <= 10, 0 <= n <= 99999999),这里n是要显示的数,s是要显示的数的尺寸。
如果某行输入包括两个0,表示输入结束。这行不需要处理。
输出
显示的方式是:用s个’-‘表示一个水平线段,用s个’|’表示一个垂直线段。这种情况下,每一个数字需要占用s+2列和2s+3行。另外,在两个数字之间要输出一个空白的列。在输出完每一个数之后,输出一个空白的行。注意:输出中空白的地方都要用空格来填充。
样例输入
2 123453 678900 0
样例输出
-- -- -- | | | | | | | | | | | | -- -- -- -- | | | | | | | | | | -- -- -- --- --- --- --- --- | | | | | | | || | | | | | | || | | | | | | | --- --- --- | | | | | | | || | | | | | | || | | | | | | | --- --- --- ---
提示
数字(digit)指的是0,或者1,或者2……或者9。
数(number)由一个或者多个数字组成。
提题意很简单,就是将数字用火柴棒来表示,因为数字8是包含了所有数字的形状的,而8是由七根火柴棒(图是盗的)组成的,可以看出,对一个数字来说,每一行仅有3种出现形式,-(|)或者空格,所以只需要判断根据火柴棒的位置然后按行输出就行了判断一下就OK了,用数组来保存每一个数字在7个位置出现的情况:
char n1[11]={"- -- -----"};//笔画1 0,2,3,5,6,7,8,9 {"| ||| ||"};//笔画2 0,4,5,6,8,9 {"||||| |||"};//笔画3 0,1,2,3,4,7,8,9 {" ----- --"};//笔画4 2,3,4,5,6,8,9 {"| | | | "};//笔画5 0,2,6,8 {"|| |||||||"};//笔画6 0,1,3,4,5,6,7,8,9 {"- -- -- --"};//笔画7 0,2,3,5,6,8,9
需要注意的是最后一个数字后面不要输出空列,不然PE。
AC代码:
/* title:C++实验:显示器 description:模拟 author: averyboy time:2017/3/22 version:1.00*/#include<cstdio>#include<iostream>//#include<algorithm>#include<cstring>#include<string>#include<cmath>#include<map>#include<set>#include<cctype>#include<ctime>#define INF 0x3f3f3f3f3#define PI acos(-1.0)using namespace std;char num[7][10] = {{'-',' ','-','-',' ','-','-','-','-','-'},{'|',' ',' ',' ','|','|','|',' ','|','|'},{'|','|','|','|','|',' ',' ','|','|','|'},{' ',' ','-','-','-','-','-',' ','-','-'},{'|',' ','|',' ',' ',' ','|',' ','|',' '},{'|','|',' ','|','|','|','|','|','|','|'},{'-',' ','-','-',' ','-','-',' ','-','-'}};void print(int s,int *str,int t){// for(int i=t-1;i>=0;i--)// cout<<str[i]; int i,j,k;//i:第i行,j:第j个数,k:控制输出个数,t:位数 for(i=0;i<2*s+3;i++) { for(j=t-1;j>=0;j--) { if(i==0) { cout<<' '; for(k=1;k<s+1;k++) { cout<<num[0][str[j]]; } cout<<' '; if(j>0) cout<<' '; } else if(i==s+1) { cout<<' '; for(k=1;k<s+1;k++) { cout<<num[3][str[j]]; } cout<<' '; if(j>0) cout<<' '; } else if(i==2*s+2) { cout<<' '; for(k=1;k<s+1;k++) { cout<<num[6][str[j]]; } cout<<' '; if(j>0) cout<<' '; } else if(i<s+1) { cout<<num[1][str[j]]; for(k=1;k<s+1;k++) { cout<<' '; } cout<<num[2][str[j]]; if(j>0) cout<<' '; } else { cout<<num[4][str[j]]; for(k=1;k<s+1;k++) { cout<<' '; } cout<<num[5][str[j]]; if(j>0) cout<<' '; } } cout<<endl; } return ;}int main(){ int s,n,i; int str[10]; while(~scanf("%d%d",&s,&n)&&(s||n)) { i=0; if(n==0) { str[0]=0; i=1; } else { while(n) { str[i++]=n%10; n/=10; } }// for(int t=i-1;t>=0;t--)// cout<<str[t]; print(s,str,i); cout<<endl; } return 0;}
还有一个解法,就是开一个足够大的数组,将所有的数字存在里面,全部处理出来之后在一起逐行输出,大概是num[30][23*10] (最多八位数,s最大为十,所以最多需要8*23列,加上空列,同理最多20行,加上空行);代码有兴趣的同学可以自己试一下。
- 被gank的openjudge2745
- Gank教学贴:Gank是一门艺术 不是固定的套路
- 基于Material-Design的Gank-IO客户端
- FlipBoard 翻页风格的 gank.io 客户端
- Gank 是一个 MaterialDesign 风格和[MVP]模式的项目。
- Android屏幕适配V1.0 ---来自火星的Gank
- React-Native 写的小项目Demo Gank.io
- Gank基友系列--简单的纯单例实现
- 提供优质文章和福利的客户端:Gank
- 一款由React Native编写的开源App--Gank
- Gank.io
- 基于Gank.IO提供的API的第三方客户端,可以在线收藏[项目开源]
- React-Native 可能是最友好的Gank.io(干货集中营)客户端了
- 《云阅》一个仿网易云音乐UI,使用Gank.Io及豆瓣Api开发的开源项目
- 爱吖妹纸——Retrofit + RxJava + MVP 架构 APP 体验代码家的干货集中营 Gank.io,福利多多,不容错过
- 【UWP】Gank 干货集中营 客户端
- 【UWP】Gank 干货集中营 客户端
- 一款基于网易云音乐 UI,使用 Gank.Io 及豆瓣 api 开发的符合 Google Material Design 的 Android 开源项目.
- hadoop
- gradle 压缩资源配置
- Oracle数据库的查询之子查询(六)
- HDU5750(数论,素数筛法)
- Appium-Android开发环境
- 被gank的openjudge2745
- 自定义View基础之坐标系
- redis集群搭建
- webpack新手简单入门1
- LeetCoder_____2Sum,3Sum,4Sum
- 四平方和
- android onKeyDown与输入法冲突问题解决方法
- goto
- 双线性插值