当前位置:编程学习 > C/C++ >>

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++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,