題目連結地址 706 - LCD Display
/** 706 - LCD Display* 作者 儀冰* QQ 974817955** 【問題描述】* 就是讓0-9之間的數變成顯示器顯示的形式。看輸入輸出範例。** 【輸入範例】2 123453 678900 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 << "|";}