UVA 706 - LCD Display(液晶显示器)
/*
* 706 - LCD Display
* 作者 仪冰
* QQ 974817955
*
* 【问题描述】
* 就是让0-9之间的数变成显示器显示的形式。看输入输出样例。
*
* 【输入样例】
2 12345
3 67890
0 0
* 【输出样例】
-- -- --
| | | | | |
| | | | | |
-- -- -- --
| | | | |
| | | | |
-- -- --
--- --- --- --- ---
| | | | | | | |
| | | | | | | |
| | | | | | | |
--- --- ---
| | | | | | | |
| | | | | | | |
| | | | | | | |
--- --- --- ---
*/
#include <iostream>
#include <cstring>
using namespace std;
const int SIZE = 8;
//经分析0-9共10个数字,一共有5个不同的部分,
//不外乎是从这5部分中选几部分组合而成
void FirstPart(int i, int lcTotalSize, int lcSize);
void SecondPart(int i, int lcTotalSize, int lcSize);
void ThirdPart(int i, int lcTotalSize, int lcSize);
void FourthPart(int i, int lcTotalSize, int lcSize);
void FifthPart(int i, int lcTotalSize, int lcSize);
int main()
{
int lcSize = 1; //LC显示器的大小(即题目中输入的s)
int lcTotalSize = 0; //显示器显示数字的大小
int number = 0; //显示的数字串
int numberOfLc[SIZE]; //把数字串一位一位拆分存到此数组
int len = 0; //纪录numberOfLc数组的长度
// int count = 0; //计数器,为了最后一组数据不输出换行。
int numberLength = 0; //纪录数字串的长度
while (cin >> lcSize >> number)
{
if ((lcSize==0) && (number==0))
{
break;
}
//if (count > 0)
//{
// cout << endl;
//}
//count++;
memset(numberOfLc, -1, sizeof(numberOfLc)); //初始化数组
numberLength = 0; //初始化字串长度
//把number一位一位的拆分
if (number == 0)
{
numberOfLc[numberLength] = 0;
numberLength++;
}
while (number)
{
numberOfLc[numberLength] = number%10;
numberLength++;
number /= 10;
}
lcTotalSize = (lcSize<<1) + 3; //计算输出结果的总行数
for (int i=1; i<=lcTotalSize; i++)
{
for (int j=numberLength-1; j>=0; j--)
{
switch (numberOfLc[j])
{
case 0:
if ((i == 1) || (i == lcTotalSize))
{
//显示0的第一行或最后一行
SecondPart(i, lcTotalSize, lcSize);
}
else if (i == (lcTotalSize>>1)+1)
{
//显示0的中间行
FirstPart(i, lcTotalSize, lcSize);
}
else
{
//显示0的其它行
FifthPart(i, lcTotalSize, lcSize);
}
if (j > 0)
{
//每一行的最后不输出空格,否则每一个数字后输出空格
cout << " ";
}
break;
case 1:
if ((i==1) || (i==(lcTotalSize>>1)+1) || (i==lcTotalSize))
{
//显示1的第一行或中间行或最后一行
FirstPart(i, lcTotalSize, lcSize);
}
else
{
//显示1的其它行
ThirdPart(i, lcTotalSize, lcSize);
}
if (j > 0)
{
//每一行的最后不输出空格,否则每一个数字后输出空格
cout << " ";
}
break;
case 2:
if ((i==1) || (i==(lcTotalSize>>1)+1) || (i==lcTotalSize))
{
//显示2的第一行或中间行或最后一行
SecondPart(i, lcTotalSize, lcSize);
}
else if((i>1) && (i<(lcTotalSize>>1)+1))
{
//显示2的上半段
ThirdPart(i, lcTotalSize, lcSize);
}
else
{
//显示2的下半段
FourthPart(i, lcTotalSize, lcSize);
}
if (j > 0)
{
//每一行的最后不输出空格,否则每一个数字后输出空格
cout << " ";
}
break;
case 3:
if ((i==1) || (i==(lcTotalSize>>1)+1) || (i==lcTotalSize))
{
//显示3的第一行或中间行或最后一行
SecondPart(i, lcTotalSize, lcSize);
}
else
{
//显示3的其它行
ThirdPart(i, lcTotalSize, lcSize);
}
if (j > 0)
{
//每一行的最后不输出空格,否则每一个数字后输出空格
cout << " ";
}
break;
case 4:
if ((i==1) || (i==lcTotalSize))
{
//显示4的第一行或最后一行
FirstPart(i, lcTotalSize, lcSize);
}
else if (i == (lcTotalSize>>1)+1)
{
//显示4的中间行
SecondPart(i, lcTotalSize, lcSize);
}
else if ((i>1) && (i<(lcTotalSize>>1)+1))
{
//显示4的上半段
FifthPart(i, lcTotalSize, lcSize);
}
else
{
//显示4的下半段
ThirdPart(i, lcTotalSize, lcSize);
}
if (j > 0)
{
//每一行的最后不输出空格,否则每一个数字后输出空格
cout << " ";
}
break;
case 5:
if ((i==1) || (i==(lcTotalSize>>1)+1) || (i==lcTotalSize))
{
//显示5的第一行或中间行或最后一行
SecondPart(i, lcTotalSize, lcSize);
}
else if ((i>1) && (i<(lcTotalSize>>1)+1))
{
//显示5的上半段
FourthPart(i, lcTotalSize, lcSize);
}
else
{
//显示5的下半段
ThirdPart(i, lcTotalSize, lcSize);
}
if (j > 0)
{
//每一行的最后不输出空格,否则每一个数字后输出空格
cout << " "补充:软件开发 , C++ ,