码迷,mamicode.com
首页 > 其他好文 > 详细

UVA 706 LCD Display 液晶显示屏 (字符串模拟)

时间:2015-04-18 11:33:01      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:acm   uva 字符串   

题目链接click here~~

题目大意

给定的数字序列,按照要求输出对应液晶显示屏上的数字

输入:

2 12345
3 67890
0 0
输出:

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

 ---   ---   ---   ---   --- 
|         | |   | |   | |   |
|         | |   | |   | |   |
|         | |   | |   | |   |
 ---         ---   ---       
|   |     | |   |     | |   |
|   |     | |   |     | |   |
|   |     | |   |     | |   |
 ---         ---   ---   --- 
解题思路

模拟,考的就是细心了,先将n拆分为单个的数字,用一个数组存起来 ,定义每个数字的关键笔划,可以知道之后的笔画其实就是重复之前的笔画!

代码:

/*
Author :HRW
UVA 706
字符串模拟
思路:先将n拆分为单个的数字,用一个数组存起来 
       定义每个数字的关键笔划,可以知道之后的笔画其实就是重复之前的笔画!
*/
#include <bits/stdc++.h>
using namespace std;
void AC(int s,int n)
{
    int a[8];
    memset(a,-1,sizeof(a)); // 将n拆分为单个的数字。  
    if(n==0) a[7]=0;
    else{
        for(int i=7;n>0; i--){
          a[i]=n%10;
          n/=10;
        }
    }                       // 定义每个数字的关键笔划。  
    string  str[5][10]={
        " - ", "   ", " - ", " - ", "   ", " - ", " - ", " - ", " - ", " - ",
        "| |", "  |", "  |", "  |", "| |", "|  ", "|  ", "  |", "| |", "| |",
        "   ", "   ", " - ", " - ", " - ", " - ", " - ", "   ", " - ", " - ",
        "| |", "  |", "|  ", "  |", "  |", "  |", "| |", "  |", "| |", "  |",
        " - ", "   ", " - ", " - ", "   ", " - ", " - ", "   ", " - ", " - "
    };
                           // 将关键笔划扩大显示,从上到下分成5块,依次判断,实际上就是将关键笔划重复。  
    for(int i=1;i<=(s*2+3);i++){
        for(int j=0;j<8;j++){
            if(a[j]!=-1){
            string ss;
            if(i==1) ss=str[0][a[j]];
            if(2<=i&&i<s+2)ss=str[1][a[j]];
            if(i==(s+2)) ss=str[2][a[j]];
            if(s+3<=i&&i<=(2*s+2)) ss=str[3][a[j]];
            if(i==(2*s+3)) ss=str[4][a[j]];
            cout<<ss[0];        // 输出关键笔划。  
            for(int k=0;k<s;k++)
            cout<<ss[1];
            cout<<ss[2];
            if(j<7) cout<<" "; // 在两个数字间要有一列空行。  
            }
       }
          cout<<endl;
    }
}
int main()
{
   //freopen("1.txt","r",stdin);
   int s,n;
   while(cin>>s>>n)
   {
       if(s==0&&n==0) break;
       AC(s,n);
       cout<<endl;
   }
   return 0;
}


UVA 706 LCD Display 液晶显示屏 (字符串模拟)

标签:acm   uva 字符串   

原文地址:http://blog.csdn.net/u013050857/article/details/45111665

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!