UVA 706 - LCD Display(液晶显示器)

题目链接地址   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 << " ";
                         }
                         break;

                    case 6:
                         if ((i==1) || (i==(lcTotalSize>>1)+1) || (i==lcTotalSize))
                         {
                             //显示6的第一行或中间行或最后一行
                             SecondPart(i, lcTotalSize, lcSize);
                         }
                         else if ((i>1) && (i<(lcTotalSize>>1)+1))
                         {
                             //显示6的上半段
                             FourthPart(i, lcTotalSize, lcSize);
                         }
                         else
                         {
                             //显示6的下半段
                             FifthPart(i, lcTotalSize, lcSize);
                         }

                         if (j > 0)
                         {
                             //每一行的最后不输出空格,否则每一个数字后输出空格
                             cout << " ";
                         }
                         break;

                    case 7:
                         if (i == 1)
                         {
                             //显示7的第一行
                             SecondPart(i, lcTotalSize, lcSize);
                         }
                         else if ((i==(lcTotalSize>>1)+1) || (i==lcTotalSize))
                         {
                             //显示7的中间行或最后一行
                             FirstPart(i, lcTotalSize, lcSize);
                         }
                         else
                         {
                             //显示其它行
                             ThirdPart(i, lcTotalSize, lcSize);
                         }

                         if (j > 0)
                         {
                             //每一行的最后不输出空格,否则每一个数字后输出空格
                             cout << " ";
                         }
                         break;

                    case 8:
                         if ((i==1) || (i==(lcTotalSize>>1)+1) || (i==lcTotalSize))
                         {
                             //显示8的第一行或中间行或最后一行
                             SecondPart(i, lcTotalSize, lcSize);
                         }
                         else
                         {
                             //显示8的其它行
                             FifthPart(i, lcTotalSize, lcSize);
                         }

                         if (j > 0)
                         {
                             //每一行的最后不输出空格,否则每一个数字后输出空格
                             cout << " ";
                         }
                         break;

                    case 9:
                         if ((i==1) || (i==(lcTotalSize>>1)+1) || (i==lcTotalSize))
                         {
                             //显示9的第一行或中间行或最后一行
                             SecondPart(i, lcTotalSize, lcSize);
                         }
                         else if ((i>1) && (i<(lcTotalSize>>1)+1))
                         {
                             //显示9的上半段
                             FifthPart(i, lcTotalSize, lcSize);
                         }
                         else
                         {
                             //显示9的下半段
                             ThirdPart(i, lcTotalSize, lcSize);
                         }

                         if (j > 0)
                         {
                             //每一行的最后不输出空格,否则每一个数字后输出空格
                             cout << " ";
                         }
                         break;

                   default : break;
                }

            } //内层for (int j=0; j<len; j++)结束

            cout << endl;

        } //外层for (int i=1; i<=lcTotalSize; i++)结束

        cout << endl;
    } //while循环结束

    return 0;
}

void FirstPart(int i, int lcTotalSize, int lcSize)
{
    for (int k=0; k<lcSize+2; k++)
    {
        cout << " ";
    }
}

void SecondPart(int i, int lcTotalSize, int lcSize)
{
    cout << " ";
    for (int k=0; k<lcSize; k++)
    {
        cout << "-";
    }
    cout << " ";
}

void ThirdPart(int i, int lcTotalSize, int lcSize)
{
    for (int k=0; k<lcSize+1; k++)
    {
        cout << " ";
    }
    cout << "|";
}

void FourthPart(int i, int lcTotalSize, int lcSize)
{
    cout << "|";
    for (int k=0; k<lcSize+1; k++)
    {
        cout << " ";
    }
}

void FifthPart(int i, int lcTotalSize, int lcSize)
{
    cout << "|";
    for (int k=0; k<lcSize; k++)
    {
        cout << " ";
    }
    cout << "|";
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值