龙曲线题目
龍曲線是以簡(jiǎn)單的數(shù)學(xué)規(guī)則畫出一種曲線,它具有以下形態(tài)。曲線從一個(gè)簡(jiǎn)單的線段起始,按照一定規(guī)則變換此線段完成整個(gè)曲線。每形成一次變換稱為“完成了一次變換代”,而每完成一代,曲線會(huì)進(jìn)化到更復(fù)雜的形式。像這種“放大其一小部分的形狀時(shí),表現(xiàn)出與整個(gè)形狀極為相似構(gòu)造的圖形”,就是分形,畫出龍曲線的方法暫且就稱為龍曲線字符串吧!龍曲線字符串由X、Y、F、+、-組成。
那么,要畫出龍曲線就從一個(gè)點(diǎn)起始畫出如下曲線即可。
F:向前方移動(dòng)一格并畫線。
+:向左旋轉(zhuǎn)90度。
-:向右旋轉(zhuǎn)90度。
X、Y:忽略。
畫出第0代龍曲線的字符串是FX。從下一代開始,按照如下方式利用前一代字符串進(jìn)行字符替換,從而獲得當(dāng)前一代的龍曲線字符串。
X-> X+YF
Y-> FX-Y
根據(jù)上面的替換式,就有如下的1、2代龍曲線字符串。
第一代:FX+YF
第二代:FX+YF+FX-YF
我們想要求出第n代龍曲線字符串。不過,考慮到答案有可能很長(zhǎng),所以只想計(jì)算出第p個(gè)字符起始長(zhǎng)度為l個(gè)字符的字符串。請(qǐng)編寫程序?qū)崿F(xiàn)這種功能。
3.3源代碼#include<iostream>#include<string>using namespace std;string s1("X+YF");//定義全局變量s1string s2("FX-Y");//定義全局變量s2string ss;string s3;?????????????????????????????????????????????void creat(string &s, int g)//生成龍曲線的函數(shù){if (g == 0){ss += s;return;}for (int i = 0; i<s.size(); i++){if (s[i] == 'X')//遇到X 則X——>X+YFcreat(s1, g - 1);elseif (s[i] == 'Y')//遇到Y(jié) 則Y——>FX-Ycreat(s2, g - 1);elsess += s[i];}}void catchS(string &s, int g, int p, int l)//獲取第g代從p開始長(zhǎng)度為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);}}?
總結(jié)
- 上一篇: 大连医科大学中山学院计算机科学与技术,2
- 下一篇: Rabbitmq---生产者和消费者概念