#include <iostream> #include <cstring> #include <algorithm> #include <vector> #include<string> //本题主要是在考递归的思想 using namespace std; int n; vector<string>p;//得有一个最初的模板,才能确定展开的位置 vector<string> dfs(vector<string>tmp, int q) { if (q == 1)return p;//此时返回模板 //要先得到当前层的模板 vector<string>s = dfs(p, q- 1); int m = s.size();//得到当前层模板的大写 //开辟一个当前层要返回的模板数组 vector<string>res(n * m);//因为每个位置都按上一层的模板进行了展开 //先全部放好空个然后再把需要填东西的地方填上 for (int i = 0; i < res.size(); i++) { res[i] = string(n * m, ' ');//每一行都放上空格,这个string初始化的方法学一下 } //然后在该填入模板的地方填入模板 for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) { if (p[i][j] != ' ') { //说明此时要进行展开,放入模板 for (int k = 0; k < m; k++) for (int l = 0; l < m; l++) { res[i * m + k][j * m + l] = s[k][l]; } } } return res; } int main() { while (cin >> n,n) { getchar();//使用getline时,如果不是第一行,要先把第一行的回车读取掉 p.clear();//模板要清空 string str; for (int i = 0; i < n; i++) { getline(cin, str); p.push_back(str); } int q; cin >> q;//得到输出层数然后开始递归 vector<string> res = dfs(p, q); for (auto item : res) { cout << item << endl; } } return 0; }