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