龙曲线题目
龍曲線是以簡單的數學規則畫出一種曲線,它具有以下形態。曲線從一個簡單的線段起始,按照一定規則變換此線段完成整個曲線。每形成一次變換稱為“完成了一次變換代”,而每完成一代,曲線會進化到更復雜的形式。像這種“放大其一小部分的形狀時,表現出與整個形狀極為相似構造的圖形”,就是分形,畫出龍曲線的方法暫且就稱為龍曲線字符串吧!龍曲線字符串由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");//定義全局變量s1string s2("FX-Y");//定義全局變量s2string 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+YFcreat(s1, g - 1);elseif (s[i] == 'Y')//遇到Y 則Y——>FX-Ycreat(s2, g - 1);elsess += 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);}}?
總結
- 上一篇: 大连医科大学中山学院计算机科学与技术,2
- 下一篇: Rabbitmq---生产者和消费者概念