UVA 706 LCD Display 液晶顯示屏 (字串模擬)
阿新 • • 發佈:2019-01-05
【題目大意】
給定的數字序列,按照要求輸出對應液晶顯示屏上的數字
輸入:
2 12345 3 67890 0 0輸出:
-- -- -- | | | | | | | | | | | | -- -- -- -- | | | | | | | | | | -- -- -- --- --- --- --- --- | | | | | | | | | | | | | | | | | | | | | | | | --- --- --- | | | | | | | | | | | | | | | | | | | | | | | | --- --- --- ---
模擬,考的就是細心了,先將n拆分為單個的數字,用一個數組存起來 ,定義每個數字的關鍵筆劃,可以知道之後的筆畫其實就是重複之前的筆畫!
程式碼:
/* Author :HRW UVA 706 字串模擬 思路:先將n拆分為單個的數字,用一個數組存起來 定義每個數字的關鍵筆劃,可以知道之後的筆畫其實就是重複之前的筆畫! */ #include <bits/stdc++.h> using namespace std; void AC(int s,int n) { int a[8]; memset(a,-1,sizeof(a)); // 將n拆分為單個的數字。 if(n==0) a[7]=0; else{ for(int i=7;n>0; i--){ a[i]=n%10; n/=10; } } // 定義每個數字的關鍵筆劃。 string str[5][10]={ " - ", " ", " - ", " - ", " ", " - ", " - ", " - ", " - ", " - ", "| |", " |", " |", " |", "| |", "| ", "| ", " |", "| |", "| |", " ", " ", " - ", " - ", " - ", " - ", " - ", " ", " - ", " - ", "| |", " |", "| ", " |", " |", " |", "| |", " |", "| |", " |", " - ", " ", " - ", " - ", " ", " - ", " - ", " ", " - ", " - " }; // 將關鍵筆劃擴大顯示,從上到下分成5塊,依次判斷,實際上就是將關鍵筆劃重複。 for(int i=1;i<=(s*2+3);i++){ for(int j=0;j<8;j++){ if(a[j]!=-1){ string ss; if(i==1) ss=str[0][a[j]]; if(2<=i&&i<s+2)ss=str[1][a[j]]; if(i==(s+2)) ss=str[2][a[j]]; if(s+3<=i&&i<=(2*s+2)) ss=str[3][a[j]]; if(i==(2*s+3)) ss=str[4][a[j]]; cout<<ss[0]; // 輸出關鍵筆劃。 for(int k=0;k<s;k++) cout<<ss[1]; cout<<ss[2]; if(j<7) cout<<" "; // 在兩個數字間要有一列空行。 } } cout<<endl; } } int main() { //freopen("1.txt","r",stdin); int s,n; while(cin>>s>>n) { if(s==0&&n==0) break; AC(s,n); cout<<endl; } return 0; }