| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1287 人关注过本帖, 1 人收藏
标题:求助“分形”递归算法???高手请进!!!
只看楼主 加入收藏
yixin1123
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2010-7-2
结帖率:0
收藏(1)
已结贴  问题点数:20 回复次数:10 
求助“分形”递归算法???高手请进!!!
分形是存在“自相似”的一个物体或一种量,从某种技术角度来说,这种“自相似”是全方位的。
盒型分形定义如下:
度数为1的分形为:
X
度数为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的盒型分形
输入描述:
输入文件包含多个测试数据,每个测试数据占一行,包含一个正整数n,(n<=7)。输入文件的最后一行为-1,表示结束。
输出描述:
对每个测试数据,用X表示输出的盒型,每个测试数据对应的输出结果后输入一串“----------”,每行的末尾不要输出任何多余的空格,否则得到的是格式错误的结果。
  
搜索更多相关主题的帖子: 算法 递归 分形 
2010-09-07 07:20
yixin1123
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2010-7-2
收藏
得分:0 

有地方打错了
度数为2的分形为:
X X
 X
X X
2010-09-07 07:23
yixin1123
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2010-7-2
收藏
得分:0 
[local]1[/local]
2010-09-07 07:26
yixin1123
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2010-7-2
收藏
得分:0 
有地方打错了
度数为2的分形为:
X X
 X
X X
2010-09-07 07:29
yixin1123
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2010-7-2
收藏
得分:0 
额?怎么搞的,第二行的‘X’字符前有个空格,怎么还没显示啊
2010-09-07 07:30
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:6 
哥也喜欢学习 分形。

我就是真命天子,顺我者生,逆我者死!
2010-09-07 08:35
yixin1123
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2010-7-2
收藏
得分:0 
各位大侠,能不能把递归的思想说一下,代码我能实现
2010-09-07 10:07
manliuhui
Rank: 2
来 自:山东德州
等 级:论坛游民
帖 子:23
专家分:52
注 册:2009-7-25
收藏
得分:0 
我有些不明白,如果只是要这样的盒型输出,只要递归出输出图形所占的行列数i,j(i=j)就可以了,然后就用(i+j)==0的条件输出‘x’就可以了;
但是那样的递归的话就太牵强了~~递归可有可无。
2010-09-07 10:18
yixin1123
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2010-7-2
收藏
得分:0 
using System;
using System.Collections.Generic;
using System.Text;

namespace example1
{
    class Program
    {   //n为最大值7时,分形的大小是3的6次方即729
        static int maxscale = 20000;
        static void Main(string[] args)
        {
            int n;//分形的大小
            int i, j; //循环变量
            char[,] Fractal = new char[maxscale, maxscale];
            while (true)
            {
                n = Convert.ToInt32(Console.ReadLine());
                if (n == -1)
                    break;
                int measure = (int)pow(3, n - 1);
                setFractl(Fractal,0,0,n);
                for (i = 0; i < measure; i++)
                {
                    int max = 0;
                    for (j = 0; j < measure; j++) //找到每行最后一个X
                    {
                        if (Fractal[i, j] == 'X')
                            max = j;
                    }
                    for (j = 0; j < max; j++)  //非X位置为空格
                    {
                        if (Fractal[i, j] != 'X')
                        {
                            Fractal[i, j] = ' ';
                        }
                    }
                    Fractal[i, max+1] = 'o';
                }
                //输出图形
                for (i = 0; i < measure; i++)
                {
                    for (j = 0; j < measure; j++)
                    {
                        if (Fractal[i, j] != 'o')
                        {
                            Console.Write(Fractal[i, j]);
                        }
                        else
                        {
                            break;
                        }
                    }
                    Console.WriteLine();
                }
                Console.WriteLine("------------------------------------------");
            }
            Console.ReadLine();
        }
        //函数功能:从(startX,startY)位置开始设置度数为n的盒形分形
        //即对盒型分形中的每个X,在字符数组Frac的相应位置设置字符“X”
        public static void setFractl(char[,] Frac, int startX, int startY, int n)
        {
            if (n == 1)
            {
                Frac[startX, startY] = 'X';
            }
            else
            {
                int L0 = (int)pow(3, n - 2);
                setFractl(Frac,startX+0,startY+0,n-1);
                setFractl(Frac,startX+2*L0,startY+0,n-1);
                setFractl(Frac,startX+L0,startY+L0,n-1);
                setFractl(Frac,startX+0,startY+2*L0,n-1);
                setFractl(Frac,startX+2*L0,startY+2*L0,n-1);
            }
        }
        public static int pow(int x, int y)
        {
            int result = 1;
            for (int i = 0; i < y; i++)
            {
                result = result * x;
            }
            return result;
        }
    }
}
2010-09-08 00:16
manliuhui
Rank: 2
来 自:山东德州
等 级:论坛游民
帖 子:23
专家分:52
注 册:2009-7-25
收藏
得分:6 
大哥使用c#编的吧~~~
2010-09-08 00:30
快速回复:求助“分形”递归算法???高手请进!!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017789 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved