1.代码实现

#include <iostream>
#include <cmath>
#include<string>
using namespace std;

char pic[6][6];
char element[3000][3000];//重复的基本图形 
char res[3000][3000];//最终结果


void Space(char res[][3000], char element[][3000], char pic[][6], int len, int row, int col) {
    for (int i = row; i < row + len; i++) {
        for (int j = col; j < col + len; j++) {
            res[i][j] = ' ';
        }
    }
}

void Update(char res[][3000], char element[][3000], char pic[][6], int len, int row, int col) {
    for (int i = row; i < row + len; i++) {
        for (int j = col; j < col + len; j++) {
            res[i][j] = element[i - row][j - col];
        }
    }
}




int main() {
    int n, level, len;
    // printf("请输入N\n");
    while (cin >> n) {


        cin.get();//前面的在读取输入时会在缓冲区中留下一个字符'\n',
                //所以如果不在此加一个getchar()把这个回车符取走的话,getline()就不会等待从键盘键入字符,
                //而是会直接取走这个回车符,从而导致读取有误;

        //printf("请输入图形\n");
        for (int i = 0; i < n; i++) {
            cin.getline(pic[i], n + 1);
        }

       // printf("请输入level\n");
        cin >> level;

        for (int a = 0; a < level; a++) {
            len = pow(n, a);

            //边界条件
            if (len == 1) {
                for (int i = 0; i < n; i++) {
                    for (int j = 0; j < n; j++) {
                        element[i][j] = pic[i][j];
                        res[i][j] = element[i][j];
                    }
                }
            }

            //更新结果
            else {
                for (int i = 0; i < n; i++) {
                    for (int j = 0; j < n; j++) {
                        if (pic[i][j] != ' ') {
                            Update(res, element, pic, len, i * len, j * len);
                        }
                        else {
                            Space(res, element, pic, len, i * len, j * len);
                        }
                    }
                }
            }

            //更新模板
            for (int i = 0; i < n * len; i++) {
                for (int j = 0; j < n * len; j++) {
                    element[i][j] = res[i][j];
                }
            }
        }#include<iostream>
#include<cstdio>

using namespace std;

int main(){
    int n;
    char a,b;
    while(scanf("%d %c %c",&n,&a,&b)!=EOF){
        printf(" ");
        int temp=n-2;
        while(temp!=0){
            printf("%c",a);
            temp--;    
        }
        printf(" ");
        printf("\n");
        for(int i=1 ; i<n/2 ; i++){                    //for循环处理前一半 
            temp=i;                                    //处理一行的前面部分,a,b交叉打印    
            while(temp!=0){
                printf("%c",a);
                temp--;
                if(temp!=0){
                    printf("%c",b);    temp--;                                                                            
                }                                        
            }                                        
            temp=n-2*i;                                //处理一行的中间部分,根据第行号奇偶打印 
            while(temp!=0){                        
                if(i%2==0){
                    printf("%c",a); temp--;
                }
                else{
                    printf("%c",b); temp--;
                }
            }
            temp=i;                                 //处理一行的后面部分,a,b交叉打印 
            while(temp!=0){
                if(temp%2==0){
                    printf("%c",b);    temp--;
                }
                else{
                    printf("%c",a); temp--;    
                }
            }
            if(temp==0) printf("\n");
        }

        int j=n;                                    //处理中间一行 
        while(j!=0){
            printf("%c",a);
            j--;
            if(j!=0){
                printf("%c",b); j--;
            }
        }
        printf("\n");

        for(int k=n/2+1 ; k<n ; k++){                    //对称,照搬之前for循环,更改temp值 
            temp=n-k-1;                                //处理一行的前面部分,a,b交叉打印    
            while(temp!=0){
                printf("%c",a);
                temp--;
                if(temp!=0){
                    printf("%c",b);    temp--;                                                                            
                }                                        
            }                                        
            temp=n-2*(n-k-1);                                //处理一行的中间部分,根据第行号奇偶打印 
            while(temp!=0){                        
                if(k%2==0){
                    printf("%c",a); temp--;
                }
                else{
                    printf("%c",b); temp--;
                }
            }
            temp=n-k-1;                                 //处理一行的后面部分,a,b交叉打印 
            while(temp!=0){
                if(temp%2==0){
                    printf("%c",b);    temp--;
                }
                else{
                    printf("%c",a); temp--;    
                }
            }
            if(temp==0) printf("\n");
        }

        printf(" ");
        temp=n-2;
        while(temp!=0){
            printf("%c",a);
            temp--;    
        }
        printf(" ");
        printf("\n");
    }

    return 0 ;
}

        //输出结果
        for (int i = 0; i < n * len; i++) {
            for (int j = 0; j < n * len; j++) {
                cout << res[i][j];
            }
            cout << endl;
        }
    }
    return 0;
}