POJ 1102 LC-Display


最近、この问题はとても人気があって、先辈はプログラミングの言语ができる人はすべてこの问题を书くことができると言って、そこで私は私ができるかどうかを见たいです.まだできますが、前回の変形問題は難しいようで、あとで書きます.私は7つの構造で書いたのです.8が持つ7つの部分です.こう書くのはちょっと複雑だと思います.しかし、真ん中のforサイクルが直接与えられているので、考えることはありません.とても簡単です.
コード:
#include<iostream>
using namespace std;
char map[300][300];
void Display(int n,int c,int s)
{
     int i,j;
    // printf("%d ",c);
     if( n!=1&&n!=4){  //   
         for( j=c+1; j<c+s+1; j++)
              map[0][j]='-';
     }
     if( n!=1&&n!=0&&n!=7){ //   
         for( j=c+1; j<c+s+1; j++)
              map[s+1][j]='-';
     }
     if( n!=1&&n!=4&&n!=7){   //   
          for( j=c+1; j<c+s+1; j++)
              map[2*s+2][j]='-';
     }
     if( n!=1&&n!=2&&n!=3&&n!=7){ //    
         for( i=1; i<s+1; i++){
                   map[i][c]='|';
         }
     }
     if( n!=5&&n!=6){    //    
         for( i=1; i<s+1; i++){
              map[i][c+s+1]='|';
         }
     }
     if( n==2||n==6||n==8||n==0){  //   
         for( i=s+2; i<2*s+2; i++){
                   map[i][c]='|';
         }
     }
     if( n!=2){  //   
         for( i=s+2; i<2*s+2; i++){
              map[i][c+s+1]='|';
         }
     }         
}
int main()
{
    int s,i,j,len,c;
    char str[10];
    //freopen("out.txt","w",stdout);
    while( scanf("%d",&s)){
           scanf("%s",str);
           if( s==0&&strcmp(str,"0")==0)
               break;
           len=strlen(str);
           memset(map,0,sizeof(map));
           for( i=0; i<2*s+3; i++){
                for( j=0; j<len*(s+3)-1; j++)
                     map[i][j]=' ';
           }
           for( i=0; i<len; i++){
                Display(str[i]-'0',(s+3)*i,s);
           }
                
           for( i=0; i<=2*s+2; i++)
                printf("%s
",map[i]); printf("
"); } }