hdu2074——叠筐

需要的时候,就把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。
Input
输入是一个个的三元组,分别是,外筐尺寸n(n为满足0<n<80的奇整数),中心花色字符,外筐花色字符,后二者都为ASCII可见字符;
Output
输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。
Sample Input
11 B A
5 @ W
Sample Output
AAAAAAAAA
ABBBBBBBBBA
ABAAAAAAABA
ABABBBBBABA
ABABAAABABA
ABABABABABA
ABABAAABABA
ABABBBBBABA
ABAAAAAAABA
ABBBBBBBBBA
AAAAAAAAA
@@@
@WWW@
@W@W@
@WWW@
@@@

字符串模拟 找个规律 注意输出格式

代码:

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int MAXN=100;
char m[MAXN][MAXN];
int main(void){
    int n;
    char a,b;
    int q=0;
    while(~scanf("%d %c %c",&n,&a,&b)){
        getchar();
        if(q!=0){
            printf("\n");
        }
        q++;
        if(n==1){
            printf("%c\n",a);
            continue;
        }
        memset(m,b,sizeof(m));
        char now=(n-1)%4==0 ? a : b;
        for(int i=1;i<=n/2+1;i++){
            for(int j=i;j<=n+1-i;j++){
                m[i][j]=now;
            }
            for(int j=i+1;j<=n/2+1;j++){
                for(int k=1;k<=n;k++){
                    m[j][k]=m[i][k];
                }
            }
            now=(now==a? b : a);
        }
        for(int i=n;i>n/2;i--){
            for(int j=1;j<=n;j++){
                m[i][j]=m[n+1-i][j];
            }
        }
        m[1][1]=m[1][n]=m[n][1]=m[n][n]=' ';
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                printf("%c",m[i][j]);
            }
            printf("\n");
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/westbrook1998/article/details/81166811