对ZOJ第1146题的解答:LC-Display

简介: 题目链接:http://acm.zju.edu.cn/show_problem.php?pid=1146       这是一道用于把数字显示成LCD样子的题目,输入每一行有两个整数,第一个整数n表示笔画大小,第二个是需要显示成LCD样子的数字。
      题目链接: http://acm.zju.edu.cn/show_problem.php?pid=1146
      这是一道用于把数字显示成LCD样子的题目,输入每一行有两个整数,第一个整数n表示笔画大小,第二个是需要显示成LCD样子的数字。这道题没有什么太难的,但是却让我在输出格式上卡住了,始终是Presentation Error,让我百思不得其解。后来我才发现原来是因为题目叙述的不够精确,使我没有准确理解输出格式的要求,导致我每一行都多输出了一个结尾空格。找到问题后,当然立刻就AC了。代码也不具备什么含量。
      由于没有什么难度的地方,并且我也加了一点点注释,所以就没什么可做更多叙述的了。这只是一道比较简单的题目,但是输出格式一定要正确理解。
ZOL 1146 CODE
#include <stdio.h>
#include 
<stdlib.h>
#include 
<string.h>
void PrintVer(int,int,char*);
void PrintHor(int,int,char*);
void PrintNumbers(int,char*);

/*LCD的字型码*/

/*    -0-
    1       2
       -3-
    4       5
       -6-     
*/

int LCDCODES[10][7]=
{
    {
1,1,1,0,1,1,1},/*0*/
    {
0,0,1,0,0,1,0},/*1*/
    {
1,0,1,1,1,0,1},/*2*/
    {
1,0,1,1,0,1,1},/*3*/
    {
0,1,1,1,0,1,0},/*4*/
    {
1,1,0,1,0,1,1},/*5*/
    {
1,1,0,1,1,1,1},/*6*/
    {
1,0,1,0,0,1,0},/*7*/
    {
1,1,1,1,1,1,1},/*8*/
    {
1,1,1,1,0,1,1/*9*/
};

char c_ver='|';
char c_hor='-';

/* 两个相邻字母中间隔了一个空列 ,因此平均每个字母占据n+3列,最后一列为间隔*/

/*打印竖直笔画,n-笔画长度,section=1或者4,numbers-数字字符串*/
void PrintVer(int n,int section,char *numbers)
{
    
char *line;
    
int i,len=(n+3)*strlen(numbers);
    line
=(char*)malloc(len+1);
    
if(line==NULL)
        
return;
    memset(line,
' ',len);
    
for(i=0;i<strlen(numbers);i++)
    {
        
if(LCDCODES[*(numbers+i)-'0'][section])
            
*(line+(n+3)*i)=c_ver;
        
if(LCDCODES[*(numbers+i)-'0'][section+1])
            
*(line+(n+3)*i+(n+1))=c_ver;
    }

    
/*检查最后一个字符,如果没有笔画,要使\0前移2格!*/
    line[len
-1]='\0';
    
/*打印n行*/
    
for(i=0;i<n;i++)
        printf(
"%s\n",line);
    free(line);
}

/*打印水平笔画,n-笔画长度,section=0,3,or 6,numbers-数字字符串*/
void PrintHor(int n,int section,char *numbers)
{
    
char *line;
    
int i,len=(n+3)*strlen(numbers);
    line
=(char*)malloc(len+1);
    
if(line==NULL)
        
return;
    memset(line,
' ',len);

    
for(i=0;i<strlen(numbers);i++)
    {
        
if(LCDCODES[*(numbers+i)-'0'][section])
            memset((line
+(n+3)*i+1),c_hor,n);
    }

    
/*注意最后一个数字后面无需空格了!所以多缩进一个位置*/
    line[len
-1]='\0';
    
/*打印1行*/
    printf(
"%s\n",line);
    free(line);
}

/* Print A set of Numbers : "23456" e.g. */
void PrintNumbers(int n,char *numbers)
{
    PrintHor(n,
0,numbers);    /*  ----    */
    PrintVer(n,
1,numbers);    /* |     |   */
    PrintHor(n,
3,numbers);    /*  ----    */
    PrintVer(n,
4,numbers);    /* |     |   */
    PrintHor(n,
6,numbers);    /*  ----    */
}

int main()
{
    
char line[20];
    
char *str1,*numbers,*delim=" ";
    
int n;

    
do
    {
        gets(line);
        str1
=strtok(line,delim);
        numbers
=strtok(NULL,delim);
        n
=atoi(str1);
        
if(n<=0)
            
break;

        PrintNumbers(n,numbers);
        
/*每两行数字之间有一个空行*/
        printf(
"\n");
    }
    
while(1);
}

 /*--------------------------------------------------
打印后正确的输出格式应该类似下面这样:(@表示行尾)
 -       -   -       - @
| |   |   |   | | | |  @
         -   -   -   - @
| |   | |     |   |   |@
 -       -   -       - @
----------------------------------------------------
*/

目录
相关文章
|
存储 安全 算法
使用jotp实现双因子验证
扫盲使用totp增强身份安全性指南,原理看懂也不用自己造轮子呀,最讨厌哪些啥也不懂的搬运工,我这里给大家解惑吧
1569 0
|
1月前
|
人工智能 自然语言处理 安全
AI Compass前沿速览:聚焦 GPT-Image-2、Qwen3.6-Max-Preview、ClawLess 与 AgentScope Tuner
AI Compass前沿速览:聚焦 GPT-Image-2、Qwen3.6-Max-Preview、ClawLess 与 AgentScope Tuner
|
2月前
|
Java 开发者 C++
Python进阶教程(一)
教程来源 https://app-adzoyybqtaf5.appmiaoda.com 掌握Python基础后,如何写出高效、可维护的代码?本文系统梳理进阶核心:面向对象深度实践(属性控制、多重继承、抽象基类)、Pythonic高级特性(生成器、装饰器、上下文管理器)、函数式编程(高阶函数、闭包、partial)及并发与性能优化,助你突破瓶颈,成为专业开发者。
|
6月前
|
分布式计算 数据可视化 数据挖掘
有哪些好用的BI产品?国内外BI工具推荐
在数字化转型浪潮下,企业亟需高效BI工具赋能决策。本文精选5款主流BI产品,涵盖瓴羊Quick BI、Tableau、Power BI、永洪BI与Smartbi,从功能、优势到应用案例全面解析,助力企业精准选型,实现数据驱动增长。
|
前端开发 Java 应用服务中间件
|
SQL 缓存 关系型数据库
(十二)MySQL之内存篇:深入探寻数据库内存与Buffer Pool的奥妙!
MySQL是基于磁盘工作的,这句几乎刻在了每个后端程序员DNA里,但它真的对吗?其实答案并不能盖棺定论,你可以说MySQL是基于磁盘实现的,这点我十分认同,但要说MySQL是基于磁盘工作,这点我则抱否定的态度,至于为什么呢?这跟咱们本章的主角:Buffer Pool有关,Buffer Pool是什么?还记得咱们在《MySQL架构篇》中聊到的缓存和缓冲区么,其中所提到的写入缓冲区就位于Buffer Pool中。
1663 1
|
机器学习/深度学习 自然语言处理 算法
机器学习和深度学习的区别
机器学习和深度学习的区别
1119 1
|
消息中间件 程序员 Windows
Windows消息机制《MFC深度详解》
Windows消息机制《MFC深度详解》
579 1
|
存储 Java
java使用pdfbox 3.0版本删除pdf文件中指定字符所在行,生成新的pdf文件
【5月更文挑战第25天】java使用pdfbox 3.0版本删除pdf文件中指定字符所在行,生成新的pdf文件
2150 1
|
监控 数据可视化 图形学
重构U3D动画系统:运用Animator Controller层叠状态机优化游戏表现
【7月更文第11天】随着Unity 3D(简称U3D)游戏开发的不断深入,高效且流畅的动画系统成为了提升玩家体验的关键因素。本文将深入探讨如何通过重构U3D项目的动画系统,利用Animator Controller的层叠状态机(Layered State Machine)特性,显著提高动画的处理效率与游戏的流畅度。我们将通过一个实战示例,展示如何设置和优化状态机,进而实现角色动画的细腻控制与高效切换。
655 0