龙曲线题目

龙曲线是以简单的数学规则画出一种曲线,它具有以下形态。曲线从一个简单的线段起始,按照一定规则变换此线段完成整个曲线。每形成一次变换称为“完成了一次变换代”,而每完成一代,曲线会进化到更复杂的形式。像这种“放大其一小部分的形状时,表现出与整个形状极为相似构造的图形”,就是分形,画出龙曲线的方法暂且就称为龙曲线字符串吧!龙曲线字符串由X、Y、F、+、-组成。

那么,要画出龙曲线就从一个点起始画出如下曲线即可。

F:向前方移动一格并画线。

+:向左旋转90度。

-:向右旋转90度。

X、Y:忽略。

画出第0代龙曲线的字符串是FX。从下一代开始,按照如下方式利用前一代字符串进行字符替换,从而获得当前一代的龙曲线字符串。

X-> X+YF

Y-> FX-Y

根据上面的替换式,就有如下的1、2代龙曲线字符串。

第一代:FX+YF

第二代:FX+YF+FX-YF

我们想要求出第n代龙曲线字符串。不过,考虑到答案有可能很长,所以只想计算出第p个字符起始长度为l个字符的字符串。请编写程序实现这种功能。

3.3源代码

#include<iostream>

#include<string>

using namespace std;

string s1("X+YF");//定义全局变量s1

string s2("FX-Y");//定义全局变量s2

string ss;

string s3;                                             

void creat(string &s, int g)//生成龙曲线的函数

{

    if (g == 0)

    {

       ss += s;

       return;

    }

    for (int i = 0; i<s.size(); i++)

    {

       if (s[i] == 'X')//遇到X 则X——>X+YF

           creat(s1, g - 1);

       else

           if (s[i] == 'Y')//遇到Y 则Y——>FX-Y

              creat(s2, g - 1);

           else

              ss += s[i];

    }

}

void catchS(string &s, int g, int p, int l)

//获取第g代从p开始长度为l的字符串

{

    creat(s, g);

    s3.assign(ss, p - 1, l);

    cout << s3 << endl;

}

int main()

{

    int c;

    int i;

    string s("FX");

    cout << "input c" << endl;

    cin >> c;

    cout << "input g   " << "input p   " << "input l   " << endl;

    for (i = c; i>0; i--)

    {

       int g;

       int p;

       int l;

       cin >> g >> p >> l;

       ss = "";

       s3 = "";

       catchS(s, g, p, l);

    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值