博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SDUST第十一次oj作业液晶显示问题
阅读量:4351 次
发布时间:2019-06-07

本文共 3760 字,大约阅读时间需要 12 分钟。

Problem H: 液晶显示

Time Limit: 1 Sec  
Memory Limit: 32 MB
Submit: 3246  
Solved: 1594
[ ][ ][ ]

Description

你的朋友刚买了一台新电脑,他以前用过的最强大的计算工具是一台袖珍计算器。现在,看着自己的新电脑,他有点失望,因为他更喜欢计算器上的LC显示器。所以,你决定写一个LC显示风格的程序帮他在电脑上显示数字。

Input

输入包括若干行,每一行有两个整数。输入为两个0表示结束,并且此行不被处理。

每行输入的两个整数s和n,满足1<=s<=10且0<=n<=99 999 999,其中n是要被现实的数字,s是n应该显示的大小(放大的倍数)。

Output

输出的数字是LC显示风格的:使用s个“-”表示水平线和s个“|”竖直线,每个数字刚好占据s+2列和2s+3行,所有没有“-”和“|”的空白处请用空格填满。并且每两个数字之间要有一列空格。

每一行输入数字对应上述一组LC显示风格输出。任意两组数字的输出之间用一个空行分割。

Sample Input

2 123453 678900 0

Sample Output

-- -- -- | | | | | | | | | | | | -- -- -- -- | | | | | | | | | | -- -- -- --- --- --- --- --- | | | | | | | || | | | | | | || | | | | | | | --- --- --- | | | | | | | || | | | | | | || | | | | | | | --- --- --- ---

HINT

Append Code

这个题目挺简单的,枚举每个数字,按字符串接收第二个数字,直接输出就可以了,枚举每个数字时由于打印方式是有规律的,所以可以先写几个函数,方便下面使用。感觉自己这样分十个数字代码太长了,有好方法请多多指教啦。
下面是我的代码:
#include 
#include
#include
int qipan[40][150]; void shu(int i, int k, int num){ int n = i + num; for(; i < n; i++) qipan[i][k] = -1;} void heng(int i, int k, int num){ intj; for(j = k + 1; j < k + num + 1; j++) qipan[i][j] = 1;} void deal(int n, int num, int k){ switch(n) { case0: shu(1, k, num); shu(num + 2, k, num); shu(1, k + num + 1, num); shu(num + 2, k + num + 1, num); heng(0, k, num); heng(2 * num + 2, k, num); break; case1: shu(1, k + num + 1, num); shu(num + 2, k + num + 1, num); break; case2: heng(0, k, num); heng(num + 1, k, num); heng(2 * num + 2, k, num); shu(1, k + num + 1, num); shu(num + 2, k, num); break; case3: heng(0, k, num); heng(num + 1, k, num); heng(2 * num + 2, k, num); shu(1, k + num + 1, num); shu(num + 2, k + num + 1, num); break; case4: shu(1, k, num); heng(num + 1, k, num); shu(1, k + num + 1, num); shu(num + 2, k + num + 1, num); break; case5: heng(0, k, num); heng(num + 1, k, num); heng(2 * num + 2, k, num); shu(1, k, num); shu(num + 2, k + num + 1, num); break; case6: shu(1, k, num); shu(num + 2, k, num); heng(0, k, num); heng(num + 1, k, num); heng(2 * num + 2, k, num); shu(num + 2, k + num + 1, num); break; case7: shu(1, k + num + 1, num); shu(num + 2, k + num + 1, num); heng(0, k, num); break; case8: shu(1, k, num); shu(num + 2, k, num); shu(1, k + num + 1, num); shu(num + 2, k + num + 1, num); heng(0, k, num); heng(num + 1, k, num); heng(2 * num + 2, k, num); break; case9: shu(1, k, num); shu(1, k + num + 1, num); shu(num + 2, k + num + 1, num); heng(0, k, num); heng(num + 1, k, num); heng(2 * num + 2, k, num); break; }} int main(){ int num, temp = 0; char s[10]; while(scanf("%d %s", &num, s) && num) { if(temp++) printf("\n"); memset(qipan, 0, sizeof(qipan)); int i,j,k,n = strlen(s); for(i = 0, k = 0; i < n; i++, k += num + 2) { if(k != 0) k++; deal(s[i] - '0', num, k); } for(i = 0; i < 2 * num + 3; i++) { for(j = 0; j < (num + 3) * n - 1; j++) { if(qipan[i][j] == 0) printf(" "); elseif(qipan[i][j] == 1) printf("-"); else printf("|"); } printf("\n"); } } return0;}

转载于:https://www.cnblogs.com/fan-jiaming/p/9440208.html

你可能感兴趣的文章
11月2日 小小的记录
查看>>
庆祝我国人民自主研发多叉转二叉成功
查看>>
EasyCodeScanner生成二维码
查看>>
ABP框架
查看>>
python文件操作
查看>>
10分钟 教你学会Linux/Unix下的vi文本编辑器
查看>>
洛谷 - P4997 - 不围棋 - 并查集 - 模拟
查看>>
关于值传递和引用传递的一些小笔记
查看>>
TAB + 滚动 + 时间间隔点击
查看>>
个人博客3-微软必应词典客户端的案例分析
查看>>
修改oracle密码
查看>>
第四百八十三天 how can I 坚持
查看>>
Packetbeat协议扩展开发教程(2)
查看>>
深入tornado中的http1connection
查看>>
Python开发【第九篇】:协程、异步IO
查看>>
Codeforces Round #243 (Div. 2)——Sereja and Table
查看>>
排序算法之堆排序
查看>>
什么是Pro*C/C++,嵌入式SQL,第一个pro*c程序,pro*c++,Makefile,Proc增删改查
查看>>
给久坐族的10个保健建议
查看>>
RedHat9.0下载地址
查看>>