首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

分形有关问题

2013-10-10 
分形问题【问题描述】 分形是指具有自相似性的对象,理论上这种自相似性的规模可以任意大,对象不需要在任意尺

分形问题
【问题描述】 分形是指具有自相似性的对象,理论上这种自相似性的规模可以任意大,对象不需要在任意尺度上结构完全相同,但要求在任意规模上,结构的类型要相同。 

箱式分形的定义如下: 

1 维箱式分形如下图所示: 



2 维箱式分形为: 

X  X 

  X 

X  X 

如果使用 B(n-1) 代表 n-1 维箱式分形,则 n 维箱式分形定义如下: 

B(n - 1) B(n - 1) 

      B(n - 1) 

B(n - 1) B(n - 1) 

你的任务是画出一个 n 维箱式分形。 

【输入形式】 

每一行一个不超过 5 的正整数,最后一行 -1 代表结束标志。 

【输出形式】 

对于每一个测试用例,输出箱式分形图形使用 ’X’ 作为基本组成单元,不同输出用“ - ”隔开。 

【输入样例】 







-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 

用递归可以解,但问题是到了第三个就出问题了,怎么能让两个B(n-1)在同一横排显示。 分形问题
[解决办法]

//输入1
//输出
//* *
// *
//* *
//输入2
//输出
//* *   * *
// *     *
//* *   * *
//   * *
//    *
//   * *
//* *   * *
// *     *
//* *   * *
//输入3
//输出
//* *   * *         * *   * *
// *     *           *     *
//* *   * *         * *   * *
//   * *               * *
//    *                 *
//   * *               * *
//* *   * *         * *   * *
// *     *           *     *
//* *   * *         * *   * *
//         * *   * *
//          *     *
//         * *   * *
//            * *
//             *
//            * *
//         * *   * *
//          *     *
//         * *   * *
//* *   * *         * *   * *
// *     *           *     *
//* *   * *         * *   * *
//   * *               * *
//    *                 *
//   * *               * *
//* *   * *         * *   * *


// *     *           *     *
//* *   * *         * *   * *
//最大输入8
#include <stdio.h>
char m[6561][6561];//==3^8
void fractalx(int cy,int cx,int L) {
    int N,i;

    if (1==L) {
        m[cy  ][cx  ]='*';
        m[cy-1][cx-1]='*';
        m[cy-1][cx+1]='*';
        m[cy+1][cx+1]='*';
        m[cy+1][cx-1]='*';
    } else {
        N=1;for (i=0;i<L-1;i++) N=N*3;
        fractalx(cy  ,cx  ,L-1);
        fractalx(cy-N,cx-N,L-1);
        fractalx(cy-N,cx+N,L-1);
        fractalx(cy+N,cx+N,L-1);
        fractalx(cy+N,cx-N,L-1);
    }
}
int main() {
    int L,N,i,y,x;

    while (1) {
        while (1) {
            printf("\nInput 1..8,0 for Exit:");
            fflush(stdout);
            if (1==scanf("%d",&L)) {
                if (0<=L && L<=8) break;
            } else rewind(stdin);
        }
        if (0==L) break;
        N=1;for (i=0;i<L;i++) N=N*3;
        for (y=3280-(N-1)/2;y<=3280+(N-1)/2;y++) {
            for (x=3280-(N-1)/2;x<=3280+(N-1)/2;x++) {
                m[y][x]=' ';
            }
        }
        fractalx(3280,3280,L);
        for (y=3280-(N-1)/2;y<=3280+(N-1)/2;y++) {
            for (x=3280-(N-1)/2;x<=3280+(N-1)/2;x++) {
                printf("%c",m[y][x]);
            }
            printf("\n");
        }
    }
    return 0;
}

热点排行