您的位置:首页 > 其它

UVa 706 Problem: LC-Display (PC 110104)

2014-01-10 22:01 1791 查看
/*
A friend of yours has just bought a new computer. Before this, the most powerful machine
he ever used was a pocket calculator. He is a little disappointed because he liked the LCD
display of his calculator more than the screen on his new computer! To make him happy,
write a program that prints numbers in LCD display style.

Input

The input file contains several lines, one for each number to be displayed. Each line
contains integers s and n, where n is the number to be displayed ( 0n99, 999, 999) and
s is the size in which it shall be displayed ( 1s10). The input will be terminated by a
line containing two zeros, which should not be processed.

Output

Print the numbers specified in the input file in an LCD display-style using s ``-'' signs
for the horizontal segments and s ``|'' signs for the vertical ones. Each digit occupies
exactly s + 2 columns and 2s + 3 rows. Be sure to fill all the white space occupied
by the digits with blanks, including the last digit. There must be exactly one column
of blanks between two digits.

Output a blank line after each number. You will find an example of each digit in the
sample output below.

Sample Input

2 12345
3 67890
0 0
Sample Output

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

---   ---   ---   ---   ---
|         | |   | |   | |   |
|         | |   | |   | |   |
|         | |   | |   | |   |
---         ---   ---
|   |     | |   |     | |   |
|   |     | |   |     | |   |
|   |     | |   |     | |   |
---         ---   ---   ---
*/
//方法貌似搓了点,但是速度还可以
#include <iostream>
#include <string>
#include <string.h>
#include <map>
#include <stdio.h>
#include <algorithm>
#include <queue>
#include <vector>
#include <math.h>
#include <set>
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
#define Max_S 12

using namespace std;
int S;
string NumStr;
char Matrix[2*Max_S + 3][(Max_S + 3)*8];//存放LCD显示数字,初始化全部为空格
//从上向下,从左向右,分成7笔画,分别为f1至f7
void f1(int k)
{
for(int i = 2;i <= S + 1;i++)
{
Matrix[1][i + (S + 3)*k] = '-';
}
}
void f2(int k)
{
for(int i = 2;i <= S + 1;i++)
{
Matrix[i][1 + (S + 3)*k] = '|';
}
}
void f3(int k)
{
for(int i = 2;i <= S + 1;i++)
{
Matrix[i][S + 2 + (S + 3)*k] = '|';
}
}
void f4(int k)
{
for(int i = 2;i <= S + 1;i++)
{
Matrix[S + 2][i + (S + 3)*k] = '-';
}
}
void f5(int k)
{
for(int i = S + 3;i <= 2*S + 2;i++)
{
Matrix[i][1 + (S + 3)*k] = '|';
}
}
void f6(int k)
{
for(int i = S + 3;i <= 2*S + 2;i++)
{
Matrix[i][S + 2 + (S + 3)*k] = '|';
}
}
void f7(int k)
{
for(int i = 2;i <= S + 1;i++)
{
Matrix[2*S + 3][i + (S + 3)*k] = '-';
}
}
//初始化Maxtrix
void init()
{
for(int i = 1;i <= 2*S + 3;i++)
{
for(int j = 1;j <= (S + 3)*8 - 1;j++)
{
Matrix[i][j] = ' ';
}
}
}

//将数字字符转换成LCD显示,每个数字由对应笔画组成
void Change(char ch,int k)
{
switch(ch)
{
case '0':{f1(k);f2(k);f3(k);f5(k);f6(k);f7(k);break;}
case '1':{f3(k);f6(k);break;}
case '2':{f1(k);f3(k);f4(k);f5(k);f7(k);break;}
case '3':{f1(k);f3(k);f4(k);f6(k);f7(k);break;}
case '4':{f2(k);f3(k);f4(k);f6(k);break;}
case '5':{f1(k);f2(k);f4(k);f6(k);f7(k);break;}
case '6':{f1(k);f2(k);f4(k);f5(k);f6(k);f7(k);break;}
case '7':{f1(k);f3(k);f6(k);break;}
case '8':{f1(k);f2(k);f3(k);f4(k);f5(k);f6(k);f7(k);break;}
case '9':{f1(k);f2(k);f3(k);f4(k);f6(k);f7(k);break;}
}

}
//显示整个数字
void Print()
{
for(int i = 1;i <= 2*S + 3;i++)
{
for(int j = 1;j <= (S + 3)*NumStr.length() - 1;j++)
{
printf("%c",Matrix[i][j]);
}
printf("\n");
}
}

int main()
{
while(cin>>S>>NumStr,S != 0)
{
init();
for(int i = 0;i < NumStr.length();i++)
{
Change(NumStr[i],i);
}
Print();
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: