标签:
给你一个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 #
这道题有点意思,代码如下
1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <iostream> 5 using namespace std; 6 7 char mat[800][800]; 8 int len[] = {0,1,3,9,27,81,243,729}; 9 void copy(int x, int y, int base) { 10 for(int i = x, p = 1; i < x + base; i++, p++) { 11 for(int j = y, q = 1; j < y + base;q++, j++) { 12 mat[i][j] = mat[p][q]; 13 } 14 } 15 } 16 17 void calf() { 18 mat[1][1] = ‘X‘; 19 for(int i = 2; i <= 7; i++) { 20 int base = len[i-1]; 21 copy(base*2+1,1,base); 22 copy(base+1,base+1,base); 23 copy(1,base*2+1,base); 24 copy(base*2+1,base*2+1,base); 25 } 26 } 27 28 int n; 29 int main(int argc, char const *argv[]) 30 { 31 32 memset(mat,‘ ‘, sizeof(mat)); 33 calf(); 34 while(scanf("%d",&n) != EOF && n > 0) { 35 for(int i = 1; i <= len[n]; i++) { 36 for(int j = 1; j <= len[n]; j++) { 37 printf("%c",mat[i][j]); 38 } 39 puts(""); 40 } 41 puts("#"); 42 } 43 }
标签:
原文地址:http://www.cnblogs.com/jasonJie/p/5787198.html