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;
}