Problem H: 液晶显示

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

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 <stdio.h>
#include <stdlib.h>
#include <string.h> 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;
}


SDUST第十一次oj作业液晶显示问题的更多相关文章

  1. 深入理解计算机系统_3e 第十一章家庭作业 CS:APP3e chapter 11 homework

    注:tiny.c csapp.c csapp.h等示例代码均可在Code Examples获取 11.6 A. 书上写的示例代码已经完成了大部分工作:doit函数中的printf("%s&q ...

  2. 第十一周博客作业 <西北师范大学| 周安伟>

    第十一周助教作业 助教博客链接https://home.cnblogs.com/u/zaw-315/ 作业要求链接https://www.cnblogs.com/nwnu-daizh/p/107615 ...

  3. 作业类型维护流程(CO)

    一.建立作业类型——kl01 目的: 藉由做作業類型執行生產報工 目錄路徑: 會計à成本控制à成本中心會計à主檔資料à作業類型à個別處理à KL01 - 建立 Transaction   Code: ...

  4. 201521123091 《Java程序设计》第12周学习总结

    Java 第十一周总结 第十一周的作业. 目录 1.本章学习总结 2.Java Q&A 3.码云上代码提交记录及PTA实验总结 4.课后阅读 1.本章学习总结 1.1 以你喜欢的方式(思维导图 ...

  5. 201521123091 《Java程序设计》第11周学习总结

    Java 第十一周总结 第十一周的作业. 目录 1.本章学习总结 2.Java Q&A 3.码云上代码提交记录及PTA实验总结 4.课后阅读 1.本章学习总结 1.1 以你喜欢的方式(思维导图 ...

  6. coursera_poj_魔兽世界终结版

    五个下午的时间!!!!终于过了!!有史以来做的最复杂的一个题这是我迄今为止做的最复杂也最具有挑战的一个oj作业.虽然之前做过比这个规模一些作业项目,但是往往有简单的模块框架,模块之前的关系也只是有些简 ...

  7. 20172306 2018-2019-2 《Java程序设计与数据结构》第七周学习总结

    20172306 2018-2019-2 <Java程序设计与数据结构>第七周学习总结 教材学习内容总结 概述 二叉查找树是一种含有附加属性的二叉树,即其左孩子小于父结点,而父结点又小于或 ...

  8. 201671030113 李星宇 实验十四 团队项目评审&课程学习总结

    项目 内容 所属课程 [所属课程(https://www.cnblogs.com/nwnu-daizh/) 作业要求 作业要求 课程学习目标 (1)掌握软件项目评审会流程:(2)反思总结课程学习内容 ...

  9. 201671030114 马秀丽 实验十四 团队项目评审&课程学习总结

    项目 内容 作业所属课程 所属课程 作业要求 作业要求 课程学习目标 (1)掌握软件项目评审会流程:(2)反思总结课程学习内容 任务一:团队项目审核已完成.项目验收过程意见表已上交. 任务二:课程学习 ...

随机推荐

  1. 为什么用B+树做索引&MySQL存储引擎简介

    索引的数据结构 为什么不是二叉树,红黑树什么的呢? 首先,一般来说,索引本身也很大,不可能全部存在内存中,因此索引往往以索引文件的方式存在磁盘上.然后一般一个结点一个磁盘块,也就是读一个结点要进行一次 ...

  2. setTimout( , 0) 详解

    setTimout( , 0) 一.前言 前端工程师们工作久了,一般都会在某些地方看见过这样的代码: setTimeout(function(){ // TODO }, 0); 举个实例,移动端我们经 ...

  3. notepad++ 插件大全

    Explorer 资源管理器 Colour Picker 拾色器 SecurePad  加密工具 HTMLTag  NppExport  导出为特殊格式 Simple script  AHKExtLe ...

  4. 30个提高Web程序执行效率的好经验

    尽量避免使用DOM.当需要反复使用DOM时,先把对DOM的引用存到JavaScript本地变量里再使用.使用设置innerHTML的方法来替换document.createElement/append ...

  5. Flask 学习系列(四)---Jinjia2 模板继承

    1.基模板 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  6. JAVA基础之File类

    个人理解: File是个文件类,可以用其增加.删除.查找某种类型的文件或者文件夹,同时根据其成员变量的特点可以综合利用,避免出现跨系统的时候出现错误,并且查找时最好输入绝对路径,以免出现不存在的文件. ...

  7. swift基础-2

    一.基本运算符 let a = 5 var b = 10 b = a if a = b{ swift 中赋值运算符,并不将自身作为一个值进行返回,所以编译不合法,帮开发者避免错误,很人性化的语言 } ...

  8. 移动端rem单位和px单位换算

    rem单位是根据html元素的单位在页面根据不同的手机屏幕分辨率动态整体的按比例缩小或放大字体. 假如html{font-size: 14px;},那么1rem=14px; 一个div宽度48px,那 ...

  9. /usr/local/sbin/fping -s www.baidu.com www.google.com

    /usr/local/sbin/fping -s www.baidu.com www.google.com

  10. GIT新手入门学习教程

    廖雪峰的GIT教程 链接地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000