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

时间限制: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倍的字符数组。


代码:

  1. #include <stdio.h>  
  2. #include <string.h>  
  3. #include <math.h>  
  4.    
  5. #define N (int)(pow(3, 6))  
  6.    
  7. int p[N][N];  
  8.    
  9. void set(int n, int x, int y)  
  10. {  
  11.     if (n == 1)  
  12.     {  
  13.         p[x][y] = 1;  
  14.         return;  
  15.     }  
  16.     int s = pow(3, n-2);  
  17.     set(n-1, x, y);  
  18.     set(n-1, x+s, y+s);  
  19.     set(n-1, x+2*s, y);  
  20.     set(n-1, x, y+2*s);  
  21.     set(n-1, x+2*s, y+2*s);  
  22. }  
  23.    
  24. void print(int n)  
  25. {  
  26.     int size = pow(3, n-1);  
  27.     for (int i=0; i<size; i++)  
  28.     {  
  29.         for (int j=0; j<size; j++)  
  30.         {  
  31.             if (p[i][j] == 0)  
  32.                 printf(" ");  
  33.             else  
  34.                 printf("X");  
  35.         }  
  36.         printf(" ");  
  37.     }  
  38.     printf("# ");  
  39. }  
  40.    
  41. int main(void)  
  42. {  
  43.     int n;  
  44.     while (scanf("%d", &n) != EOF)  
  45.     {  
  46.         if (n <= 0)  
  47.             break;  
  48.         memset(p, 0, sizeof(p));  
  49.         set(n, 0, 0);  
  50.         print(n);  
  51.     }  
  52.    
  53.     return 0;  
  54. }  
  55. /************************************************************** 
  56.     Problem: 1345 
  57.     User: liangrx06 
  58.     Language: C 
  59.     Result: Accepted 
  60.     Time:80 ms 
  61.     Memory:3080 kb 
  62. ****************************************************************/
原文地址:https://www.cnblogs.com/liangrx06/p/5083788.html