题解 | Repeater
Repeater
https://www.nowcoder.com/practice/97fd3a67eff4455ea3f4d179d6467de9
#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;
}

查看9道真题和解析