C++博客 :: 首页 :: 新随笔 ::  ::  :: 管理

pku1102模拟

Posted on 2010-08-23 16:25 Kevin_Zhang 阅读(217) 评论(0)  编辑 收藏 引用 所属分类: 模拟

http://acm.pku.edu.cn/JudgeOnline/problem?id=1102 
本题目重点在于输出的控制上,因为不能从下往上输出,因此输出时是从左往右,自上而下的输出。数字N看成字符串来处理。一共十个字符,如何控制。LCD输出,又叫七段数码管,由此可以得到启发,10个字符,每个字符7段,则建一个7X10的二维矩阵存储笔画信息,也就是一个二维数组。要基于7段数码管的思想输出。二维矩阵的信息比较容易得到。


#include<stdio.h>
#include
<string.h>
void main()
{
    
void dup(char c,int n);
    
char line[7][11]={"- -- -----","|   ||| ||","|||||  |||","  ----- --","| |   | | ","|| |||||||","- -- -- --"};//总共7笔,每一笔对每一个数字显示不同
    char str[9];//利用字符串处理测试数据将的又是在只要屏幕能容下,不管数据大小
    int  s,i,j,k,t;
    
while(scanf("%d%s",&s,str)&&s!=0)//输入测试数据直到输入0 0 为止,实际上只要判断输入的s为0即可。
    {     
        
for(j=0;j<7;j++)//按笔画输出为循环条件,一共输出7笔,笔画从0到6
        {
            
if(j%3==0)//输出第 0 3 6笔的时候按如下格式
            {
                
for(k=0;k<strlen(str);k++)
                
{
                    printf(
" ");
                    t
=(int)(str[k]-48);//字符转换成对应的数字
                    dup(line[j][t],s);//重复输出s个该笔画
                    printf("  ");
                }

                printf(
"\n");//每次输出一笔后换行
            }

            
else  //输出第1 2 4 5 笔的时候按如下格式
            {
                
for(i=1;i<=s;i++)//重复输出s个该笔画,但是要换行
                {
                    
for(k=0;k<strlen(str);k++)//第1 2 和第4 5 笔是连在一行输出的
                    {
                        t
=(int)(str[k]-48);
                        printf(
"%c",line[j][t]);
                        dup(
' ',s);
                        printf(
"%c",line[j+1][t]);
                        printf(
" ");
                    }

                    printf(
"\n");//每次输出一笔后换行,对1 2 4 5 而言是输出2笔就换行
                }

                j
=j+1;
            }

        }

        printf(
"\n");//两个测试数据的输出结果换行,第一次提交错误就是犯在这儿
    }

}


void dup(char c,int n)//重复输出字符函数,用于重复输出s个字符
{
    
int i;
    
for(i=1;i<=n;i++)
        printf(
"%c",c);
}













=======================

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理