时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:361
解决:157
-
题目描述:
-
给你一个n,然后让你输出F(n)
规则是这样的,F(n)的输出结果是:
F(n-1) F(n-1)
F(n-1)
F(n-1) F(n-1)
F(1)的输出结果是:X
那么根据规则F(2)的输出结果应该是:
X X
X
X X
-
输入:
-
题目有多组输入,每组输入一个n(n<=7)。
当输入零或负数的时候结束输入。
-
输出:
-
对每组输入输出相应的F(n),每组输出最后一行是‘#’。
-
样例输入:
-
1
2
3
-1
-
样例输出:
-
X
#
X X
X
X X
#
X X X X
X X
X X X X
X X
X
X X
X X X X
X X
X X X X
#
思路:
设一个最大的二维字符数组,递归的打印二维数组的值。由于这个题的模板固定为X形状,因此每次更新只要更新当前边长的3倍,也就是面积的9倍的字符数组。
代码:
-
#include <stdio.h>
-
#include <string.h>
-
#include <math.h>
-
-
#define N (int)(pow(3, 6))
-
-
int p[N][N];
-
-
void set(int n, int x, int y)
-
{
-
if (n == 1)
-
{
-
p[x][y] = 1;
-
return;
-
}
-
int s = pow(3, n-2);
-
set(n-1, x, y);
-
set(n-1, x+s, y+s);
-
set(n-1, x+2*s, y);
-
set(n-1, x, y+2*s);
-
set(n-1, x+2*s, y+2*s);
-
}
-
-
void print(int n)
-
{
-
int size = pow(3, n-1);
-
for (int i=0; i<size; i++)
-
{
-
for (int j=0; j<size; j++)
-
{
-
if (p[i][j] == 0)
-
printf(" ");
-
else
-
printf("X");
-
}
-
printf("\n");
-
}
-
printf("#\n");
-
}
-
-
int main(void)
-
{
-
int n;
-
while (scanf("%d", &n) != EOF)
-
{
-
if (n <= 0)
-
break;
-
memset(p, 0, sizeof(p));
-
set(n, 0, 0);
-
print(n);
-
}
-
-
return 0;
-
}
-
-
-
-
-
-
-
-