用C++写一下这道题的代码:给定一个 1×1的方格矩阵,方格为白色: 你需要对该矩阵进行 k 次扩张操作,并输出最终得到的矩阵。 扩张操作的具体规则如下。 首先,给定一个 n×n 的方格矩阵,其中的每个方格要么是白色,要么是黑色,称此矩阵为模板矩阵。 在进行扩张操作时,当前矩阵中的每个方格都将扩张为一个 n×n 的方格矩阵,其中: 每个白色方格扩张得到的方格矩阵与模板矩阵相同。 每个黑色方格扩张得到的方格矩阵只包含黑色方格。 输入格式 第一行包含两个整数 n,k 。 接下来 n 行,每行包含 n 个字符,每个字符要么为 .,要么为 *,其中第 i 行第 j 个字符用来描述模板矩阵第 i 行第 j 列的方格颜色,. 表示白色,* 表示黑色。 保证模板矩阵中至少包含一个白色方格。 输出格式 输出一个 nk×nk 的字符矩阵,用来表示最终得到的矩阵。 . 表示白色方格,* 表示黑色方格。
时间: 2024-02-13 13:00:44 浏览: 24
以下是另一种使用 C++ 实现的代码:
```cpp
#include <iostream>
#include <vector>
using namespace std;
const int N = 20;
char grid[N][N];
vector<vector<char>> mat(N * N, vector<char>(N * N));
void expand(int r, int c, int len)
{
for (int i = r * len; i < (r + 1) * len; i++)
{
for (int j = c * len; j < (c + 1) * len; j++)
{
mat[i][j] = grid[r][c];
}
}
}
int main()
{
int n, k;
cin >> n >> k;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cin >> grid[i][j];
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (grid[i][j] == '.') // 白色方格与模板矩阵相同
{
expand(i, j, k);
}
else // 黑色方格只包含黑色
{
for (int r = 0; r < k; r++)
{
for (int c = 0; c < k; c++)
{
for (int x = r * n; x < (r + 1) * n; x++)
{
for (int y = c * n; y < (c + 1) * n; y++)
{
mat[x][y] = '*';
}
}
}
}
}
}
}
for (int i = 0; i < k * n; i++)
{
for (int j = 0; j < k * n; j++)
{
cout << mat[i][j];
}
cout << endl;
}
return 0;
}
```
输入示例:
```
2 2
. *
* .
```
输出示例:
```
. . * *
. . * *
* * . .
* * . .
```