c++分治xjoi9437矩阵变幻

【题目描述】

有一个奇幻的矩阵,在不停的变幻,其变幻方式为:
数字 1 变成矩阵:

1 1
1 2
数字 2 变成矩阵:

2 2
2 1
最初该矩阵只有一个元素 1,变幻 n 次后,矩阵会变成什么样?
例如,矩阵最初为:[1];

矩阵变幻 1 次后:

1 1
1 2
矩阵变幻 2 次后:

1 1 1 1
1 2 1 2
1 1 2 2
1 2 2 1
【输入】

一行一个整数 n(1<=n<=10),表示矩阵变幻的次数

【输出】

输出若干行,每行若干个整数,整数间以空格分开,表示变幻 n 次后的矩阵

【样例输入】

3

【样例输出】

1 1 1 1 1 1 1 1
1 2 1 2 1 2 1 2
1 1 2 2 1 1 2 2
1 2 2 1 1 2 2 1
1 1 1 1 2 2 2 2
1 2 1 2 2 1 2 1
1 1 2 2 2 2 1 1
1 2 2 1 2 1 1 2
想自己尝试,但做不出来

#include<iostream>
#include<cstdio>
using namespace std;
int n;
int a[10][10],b[10][10];
int main(){
    cin>>n;
    a[1][1]=1;
    for(int i=1;i<=n;i++){
        int len=1<<i;
        for(int j=1;j<=len;j++){
            for(int k=1;k<=len;k++){
                b[j][k]=a[(j+1)/2][(k+1)/2];
                if(j%2==0) b[j][k]+=2;
                if(k%2==0) b[j][k]+=1;
            }
        }
        for(int j=1;j<=len;j++)
            for(int k=1;k<=len;k++)
                a[j][k]=b[j][k];
    }
    for(int i=1;i<=1<<n;i++){
        for(int j=1;j<=1<<n;j++)
            cout<<a[i][j]<<" ";
        cout<<endl;
    }
    return 0;
}

#include <iostream>
using namespace std;

int n;

void change(int x, int y, int k) {
    if(k == 1) {
        cout << 1 << " ";
        return;
    }
    int len = 1 << (k - 1);
    change(x, y, k - 1);
    change(x, y + len, k - 1);
    change(x + len, y, k - 1);
    change(x + len, y + len, k - 1);
}

int main() {
    cin >> n;
    change(0, 0, n);
    return 0;
}