您的位置:首页 > 其它

九度OJ 1345:XXX定律之画X (递归)

2015-11-23 10:37 309 查看
时间限制: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倍的字符数组。

代码:

[cpp] view
plaincopy

#include <stdio.h>

#include <string.h>

#include <math.h>



#define N (int)(pow(3, 6))



int p

;



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;

}

/**************************************************************

Problem: 1345

User: liangrx06

Language: C

Result: Accepted

Time:80 ms

Memory:3080 kb

****************************************************************/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: