2010-1154

从 Trac 迁移的文章

这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。

原文章内容如下:

排版题。

这题首先先人肉出当n=1时,除了R和M的其他字符的输出。

然后对于读入的字符进行放大后输出就可以了 R和M特殊搞一下,这题没什么难度。

代码:


{{{
#!cpp
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <utility>
#include <vector>
#include <map>
#include <set>
#include <algorithm>
#include <string>
#include <functional>

using namespace std;


//A B C D E F N O U 9 8 

char zimu[][3][4]={ {" _ ", //A
                    "|_|",
                    "| |",},
                    {" _ ", //B ,8
                    "|_|",
                    "|_|",},
                    {" _ ", // C
                    "|  ",
                    "|_ ",},
                    {" _ ",//D
                    "| |",
                    "|_|"},
                    {" _ ",//E
                    "|_ ",
                    "|_ "},
                    {" _ ",//F
                    "|_ ",
                    "|  "},
                    {" _ ",//N
                    "| |",
                    "| |"},
                    {" _ ",//O
                    "| |",
                    "|_|"},
                    {"   ",//U
                    "| |",
                    "|_|"},
                    {" _ ",//9
                    "|_|",
                    "  |"}
};


int b[256];
char ans[20][1000];

void gao(char a , int pos , int n){

    int tmp = b[a];
    for(int i=0;i<3;++i){
        if ( zimu[tmp][i][1] == '_' ) {

            for(int j=0;j<n;++j){

                ans[i*n][pos+j+1] ='_';             

            }

        }

    }

    for(int i=1;i<3;++i){
        if ( zimu[tmp][i][0] == '|' ) {

            for(int j=0;j<n;++j){

                ans[(i-1)*n+j+1][pos]='|';

            }

        }

        if ( zimu[tmp][i][2] == '|' ) {
            for(int j=0;j<n;++j){
                ans[(i-1)*n+j+1][pos+n+1] = '|';
            }
        }

    }


}


void gaom(int pos , int n){

    for(int i=0;i<n;++i){
        ans[0][pos+i+1]='_';
    }
    for(int j=0;j<2*n;++j){

        ans[1+j][pos] = '|'; 
        ans[1+j][pos+n+1] ='|';
        ans[1+j][pos+1] ='|';

    }

}


void gaor(int pos , int n ) {


    for(int i=0;i<n;++i){
        ans[0][pos+1+i] = '_';
        ans[n][pos+1+i] = '_';
    }
    for(int i=0;i<2*n;++i){

        ans[i+1][pos] = '|' ;

    }

    for(int i=0;i<n;++i){

        ans[i+1][pos+n+1] = '|' ;
        ans[i+n+1][pos+n] = '|' ; 

    }

}

int main(){

    int n;
    char s[ 1000] ;
//A B C D E F N O U 9 8 

    b['A'] = 0;
    b['B'] = 1;
    b['C'] = 2;
    b['D'] = 3;
    b['E'] = 4;
    b['F'] = 5;
    b['N'] = 6;
    b['O'] = 7;
    b['U'] = 8;
    b['9'] = 9;
    b['8'] = 1;

    while ( scanf("%d",&n)!=EOF ) {

        scanf("%s",s);
        memset(ans,' ' , sizeof(ans));
        int m = strlen(s);
        for(int i=0;i<m;++i){

            if ( s[i] == 'M' ) {
                gaom(i*(n+3) , n);
            }
            else if ( s[i] == 'R' ) {
                gaor(i*(n+3) , n);
            }
            else {
                gao(s[i],i*(n+3) , n);
            }

        }

        for(int i=0;i<2*n+1;++i){

            for(int j=0;j<(m-1)+m*(n+2);++j){
                printf("%c",ans[i][j]);
            }
            printf("\n");

        }

    }

    return 0;
}


}}}

排版题。

这题首先先人肉出当n=1时,除了R和M的其他字符的输出。

然后对于读入的字符进行放大后输出就可以了 R和M特殊搞一下,这题没什么难度。

代码:

#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <utility>
#include <vector>
#include <map>
#include <set>
#include <algorithm>
#include <string>
#include <functional>
using namespace std;
//A B C D E F N O U 9 8 
char zimu[][3][4]={ {" _ ", //A
                    "|_|",
                    "| |",},
                    {" _ ", //B ,8
                    "|_|",
                    "|_|",},
                    {" _ ", // C
                    "|  ",
                    "|_ ",},
                    {" _ ",//D
                    "| |",
                    "|_|"},
                    {" _ ",//E
                    "|_ ",
                    "|_ "},
                    {" _ ",//F
                    "|_ ",
                    "|  "},
                    {" _ ",//N
                    "| |",
                    "| |"},
                    {" _ ",//O
                    "| |",
                    "|_|"},
                    {"   ",//U
                    "| |",
                    "|_|"},
                    {" _ ",//9
                    "|_|",
                    "  |"}
};
int b[256];
char ans[20][1000];
void gao(char a , int pos , int n){
    int tmp = b[a];
    for(int i=0;i<3;++i){
        if ( zimu[tmp][i][1] == '_' ) {
            for(int j=0;j<n;++j){
                ans[i*n][pos+j+1] ='_';             
            }
        }
    }
    for(int i=1;i<3;++i){
        if ( zimu[tmp][i][0] == '|' ) {
            for(int j=0;j<n;++j){
                ans[(i-1)*n+j+1][pos]='|';
            }
        }
        if ( zimu[tmp][i][2] == '|' ) {
            for(int j=0;j<n;++j){
                ans[(i-1)*n+j+1][pos+n+1] = '|';
            }
        }
    }
}
void gaom(int pos , int n){
    for(int i=0;i<n;++i){
        ans[0][pos+i+1]='_';
    }
    for(int j=0;j<2*n;++j){
        ans[1+j][pos] = '|'; 
        ans[1+j][pos+n+1] ='|';
        ans[1+j][pos+1] ='|';
    }
}
void gaor(int pos , int n ) {
    for(int i=0;i<n;++i){
        ans[0][pos+1+i] = '_';
        ans[n][pos+1+i] = '_';
    }
    for(int i=0;i<2*n;++i){
        ans[i+1][pos] = '|' ;
    }
    for(int i=0;i<n;++i){
        ans[i+1][pos+n+1] = '|' ;
        ans[i+n+1][pos+n] = '|' ; 
    }
}
int main(){
    int n;
    char s[ 1000] ;
//A B C D E F N O U 9 8 
    b['A'] = 0;
    b['B'] = 1;
    b['C'] = 2;
    b['D'] = 3;
    b['E'] = 4;
    b['F'] = 5;
    b['N'] = 6;
    b['O'] = 7;
    b['U'] = 8;
    b['9'] = 9;
    b['8'] = 1;
    while ( scanf("%d",&n)!=EOF ) {
        scanf("%s",s);
        memset(ans,' ' , sizeof(ans));
        int m = strlen(s);
        for(int i=0;i<m;++i){
            if ( s[i] == 'M' ) {
                gaom(i*(n+3) , n);
            }
            else if ( s[i] == 'R' ) {
                gaor(i*(n+3) , n);
            }
            else {
                gao(s[i],i*(n+3) , n);
            }
        }
        for(int i=0;i<2*n+1;++i){
            for(int j=0;j<(m-1)+m*(n+2);++j){
                printf("%c",ans[i][j]);
            }
            printf("\n");
        }
    }
    return 0;
}