Fractal Problem description A fractal is an object or quantity that displays self-similarity, in a somewhat technical sense, on all scales. The object need not exhibit exactly the same structure at all scales, but the same "type" of structures must appear on all scales. A box fractal is defined as below : A box fractal of degree 1 is simply X A box fractal of degree 2 is X X X X X If using B(n - 1) to represent the box fractal of degree n - 1, then a box fractal of degree n is defined recursively as following B(n - 1) B(n - 1) B(n - 1)B(n - 1) B(n - 1) Your task is to draw a box fractal of degree n. Input The input consists of several test cases. Each line of the input contains a positive integer n which is no greater than 7. The last line of input is a negative integer ?1 indicating the end of input. Output For each test case, output the box fractal using the 'X' notation. Please notice that 'X' is an uppercase letter. Print a line with only a single dash after each test case. be careful, no extra blankspace allowed in the output. Sample Input 12-1 Sample Output X-X X XX X-X X X X X XX X X X X X X X XX X X X X XX X X X // 提交了几次,开始是超时,后来改进如下// 可能不超时,但是Wrong Answer,测试怎么都没测出来// 很多情况都考虑到了包括空格,回车,最后终于发现用管道测试时// 如果输入文件里只有7(-1也在里面)得到的结果是乱码// 不知道是不是错在这里。就算错了也不知道怎么改,我尝试了加大数组// 甚至改为C++代码,结果仍是乱码,极度郁闷 ! #include <stdio.h>#include <string.h>#include <stdlib.h> int a[] = {1,3,9,27,81,243,729}; char metrix[800][800]; void set(int x,int y,int n){ metrix[x][y] = 'X'; metrix[x-1][y-1] = 'X'; metrix[x+1][y-1] = 'X'; metrix[x+1][y+1] = 'X'; metrix[x-1][y+1] = 'X'; if(n == 2) return ; set(x, y, n - 1); set(x - a[n-2],y - a[n-2],n - 1); set(x + a[n-2],y - a[n-2],n - 1); set(x + a[n-2],y + a[n-2],n - 1); set(x - a[n-2],y + a[n-2],n - 1);} int main(){ int n,i,j,flag = 0; char saveIndex[800]; memset(metrix,' ',800*800); set(364,364,7); while(1){ scanf("%d",&n); if(n == -1) break; if(flag) printf("\n"); if(n == 1){ printf("X\n-"); flag = 1; continue; } for(i = 0; i < a[n-1]; i++){ for(j = a[n-1]; 1; j --){ if(metrix[i][j] != ' ') break; } saveIndex[i] = j+1; metrix[i][j+1] = '\0'; } for(i = 0; i < a[n-1]; i++) printf("%s\n",metrix[i]); for(i = 0; i < a[n-1]; i++) metrix[i][saveIndex[i]] = ' '; printf("-"); flag = 1; } return 0;}

评论