程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> zju1146LC-Display

zju1146LC-Display

編輯:C++入門知識

題目大意:

 s, n (1 <= s <= 10, 0 <= n <= 99 999 999),
每次輸入s,n,,將n輸出成LC樣式,"-" 表示橫向段,  "|"表示縱向段每個數字占 s+2 列  2s+3 行.
兩個數字之間有一空列.在每個數後輸出一空行.www.2cto.com

解題思路:
將每個數字的7段是否要顯示用一個數組保存起來.然後對於每個數,先處理頂部行,
在輸出中間s行,等等。對於每行,又由對每個數字的輸出和空格組成。
對那3行,先輸出一個空格,然後根據數組看是輸出s個"-"還是空格,再輸出一個空格。
對於那2s行,先根據數組看是輸出空格還是豎線,再輸出s個空格,等等。

代碼:


[cpp] 
// 代碼一  
#include <iostream> 
#include <cstring> 
#include <cstdio> 
using namespace std; 
bool map[10][7]= { 
    1,1,1,0,1,1,1, 
    0,0,1,0,0,1,0, 
    1,0,1,1,1,0,1, 
    1,0,1,1,0,1,1, 
    0,1,1,1,0,1,0, 
    1,1,0,1,0,1,1, 
    1,1,0,1,1,1,1, 
    1,0,1,0,0,1,0, 
    1,1,1,1,1,1,1, 
    1,1,1,1,0,1,1 }; 
void printDigit(bool left,bool mid,bool right,int s)//處理每一行的數字輸出 
{   printf("%c",left?'|':' '); 
    for(int i=0;i<s;i++)printf("%c",mid?'-':' '); 
    printf("%c",right?'|':' '); 

 
int main(int argc, char *argv[]) 

    int s,flag=0; 
    char n[20]; 
    bool left,mid,right; 
    while(scanf("%d%s",&s,n)==2&&s) 
    {   int len=strlen(n); 
        for(int i=0;i<len;i++) //最頂端一行 
        {   printDigit(0,map[n[i]-'0'][0],0,s); 
            if(i==len-1)printf("\n"); 
            else printf(" "); 
        } 
        for(int j=0;j<s;j++)//上邊s行 
        { 
            for(int i=0;i<len;i++) 
            {   printDigit(map[n[i]-'0'][1],0,map[n[i]-'0'][2],s); 
                if(i==len-1)printf("\n"); 
                else printf(" "); 
            } 
        } 
        for(int i=0;i<len;i++)//中間行 
        {   printDigit(0,map[n[i]-'0'][3],0,s); 
            if(i==len-1)printf("\n"); 
            else printf(" "); 
        } 
        for(int j=0;j<s;j++)//下邊s行 
        { 
            for(int i=0;i<len;i++) 
            {   printDigit(map[n[i]-'0'][4],0,map[n[i]-'0'][5],s); 
                if(i==len-1)printf("\n"); 
                else printf(" "); 
            } 
        } 
        for(int i=0;i<len;i++)//底行 
        {   printDigit(0,map[n[i]-'0'][6],0,s); 
            if(i==len-1)printf("\n"); 
            else printf(" "); 
        } 
        printf("\n"); 
    } 
    return 0; 

[cpp] 
// 代碼二  
#include <iostream> 
#include <cstring> 
#include <cstdio> 
using namespace std; 
bool map[10][7]= { 
    1,1,1,0,1,1,1, 
    0,0,1,0,0,1,0, 
    1,0,1,1,1,0,1, 
    1,0,1,1,0,1,1, 
    0,1,1,1,0,1,0, 
    1,1,0,1,0,1,1, 
    1,1,0,1,1,1,1, 
    1,0,1,0,0,1,0, 
    1,1,1,1,1,1,1, 
    1,1,1,1,0,1,1 }; 
void printDigit(bool left,bool mid,bool right,int s) //輸出每個數字的一行 
{   printf("%c",left?'|':' '); 
    for(int i=0;i<s;i++)printf("%c",mid?'-':' '); 
    printf("%c",right?'|':' '); 

 
void printRow(bool isH,int c,int s,char* n,int len)//輸出一行 

    for(int i=0;i<len;i++) 
    {   if(1==isH)printDigit(0,map[n[i]-'0'][c],0,s); 
        else printDigit(map[n[i]-'0'][c],0,map[n[i]-'0'][c+1],s); 
        if(i==len-1)printf("\n"); 
        else printf(" "); 
    } 

int main(int argc, char *argv[]) 

    int s,flag=0; 
    char n[20]; 
    bool left,mid,right; 
    while(scanf("%d%s",&s,n)==2&&s) 
    {   int len=strlen(n); 
        printRow(1,0,s,n,len); 
        for(int j=0;j<s;j++) 
            printRow(0,1,s,n,len); 
        printRow(1,3,s,n,len); 
        for(int j=0;j<s;j++) 
            printRow(0,4,s,n,len); 
        printRow(1,6,s,n,len); 
        printf("\n"); 
    } 
    return 0; 


 

作者:honesty2008

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved