递归画图 | ||||||
| ||||||
Description | ||||||
递归图形是一类非常有意思的图形,今天介绍其中一种,点阵递归图(这个名字其实是随便起的)。点阵递归图有如下特点: 第一层若是:
第二层即为: | ||||||
Input | ||||||
输入数据有多组,第一行输入两个正整数a,b(ab<1000),表示边长为a的正方形第一层图形,b表示将要输出的b层图形,接下来是a行字符串,每行字符串包含a个字符,字符为空格或*。 | ||||||
Output | ||||||
对于每组数据输出一个图形,每组输出后跟随一个空行。 | ||||||
Sample Input | ||||||
| ||||||
Sample Output | ||||||
| ||||||
Hint | ||||||
输入输出为正方形图形,不是*的位置,保留空格占位。 |
#include<bits/stdc++.h>
using namespace std;
#define MAX 1005
char a[MAX][MAX];
char ans[MAX][MAX];
int n;
void dfs(int x, int y, int c)
{
if(c == 1)
{
ans[x][y] = '*';
return;
}
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
if(a[i][j] == '*')
dfs(x + i * pow(n, c - 1), y + j * pow(n, c - 1), c - 1);
}
int main()
{
int m;
while(scanf("%d%d", &n, &m) != EOF)
{
getchar();
for(int i = 0; i < MAX; i++)
for(int j = 0; j < MAX; j++)
ans[i][j] = ' ';
for(int i = 0; i < n; i++)
gets(a[i]);
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
if(a[i][j] == '*')
dfs(i, j, m);
int num = pow(n, m);
for(int i = 0; i < num; i++)
{
for(int j = 0; j < num; j++)
printf("%c", ans[i][j]);
printf("\n");
}
printf("\n");
}
return 0;
}