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. 关于byte[]和字符串的转换

    public static String byteToStr(byte[] b) { return new String(b); } public static byte[] strToByte(St ...

  2. c#基础值类和引用类型

    //值类型:int double char decimal bool enum struct //引用类型:string 数组 自定义类 集合 object 接口 值传递传递的值得本身 引用传递传递的 ...

  3. C++ string 类型提取字符串

    在某些情况下需要对输入的字符串进行处理,提取其中的需要的信息. 比如在linux中输入"mkdir test",新建test文件夹,就需要提取其中的test字符. 提取的方法需要b ...

  4. Writable和Comparable

    WritableComparable接口相当于继承了上述两个接口的新接口 : Public interface WritableComparable<T>extends Writable, ...

  5. ALTER AVAILABILITY GROUP (Transact-SQL)

    更改 SQL Server 中现有的 AlwaysOn 可用性组.              只有当前主副本支持大多数 ALTER AVAILABILITY GROUP 参数. 但是,只有辅助副本支持 ...

  6. 同步Windows 10与MIUI 9来完成你的日程安排

    我们都知道,outlook可以有效管理你的日程.而MIUI 9在负一屏上全新改版了界面,变得更加全面人性化.接下来我将展示几种方法,让你的Windows 10与MIUI 9协同工作. 一.outloo ...

  7. JavaScript模板引擎的使用

    为了将数据库中的一组记录转换成HTML输出到界面上,大家都采用哪些做法呢? 在WebForm时代我们经常使用datagrid.repeater,当MVC问世后我们开始直接在视图上编写C#循环语句,而现 ...

  8. Android(java)学习笔记130:Android中操作XML数据(使用Pull解析器)

    1. Pull解析器的运行方式与 SAX 解析器相似.它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件.跟SAX不同的是, Pull解析器 ...

  9. springboot 测试

    本次测试使用的是springboot 中的测试 1.(对service 的测试)下面的测试.将会启动容器进行测试 @RunWith(SpringRunner.class) @SpringBootTes ...

  10. websocket+订阅发布者模式模拟实现股票价格实时刷新

    1.新建文件夹 2.文件夹中新建index.html 和 index.js index.html <!DOCTYPE html> <html lang="en"& ...