看板 RSSH93_301 關於我們 聯絡資訊
#include<iostream> using namespace std; int main() { int x=0,temp=0,ansb=2,count=0,fib=0,fib1=1,fib2=2; double ansa=1; cout<<"Enter an integer >=0:"; cin>>x; if(x<0) //防呆一下 { cout<<"It's not funny...\n"; return 0; } while(temp<=x) //先算出a(x)是哪一個數字 { count++; //count是算現在這一群有幾個數 第1群1個數 第2群2個數... temp=temp+count; //temp存著目前算到多少個數,就是a(x)前面共有幾項 } temp=temp-count; //算過頭了 減回來 count=0; while(temp<x) { temp++; count++; //現在count算的是a(x)在該群中第幾個數 } for(int i=1;i<=count;i++) { ansa=ansa*i; //階乘 } if(count==0)ansa=1; cout<<"a("<<x<<")="<<ansa<<endl; temp=3; while(temp<=x) { ansb++; //ansb預設為2 因為排除前3項 做了幾次費氏數列加法 答案就 是多少 fib=fib1+fib2; temp=temp+fib; //一樣算b(x)是在哪一群 fib1=fib2; fib2=fib; } if(x==0)ansb=1; if(x==1||x==2)ansb=2; //數列前幾項較不規則 當特殊情況處理 cout<<"b("<<x<<")="<<ansb<<endl; system("pause"); return 0; } 笨方法... 還想蠻久的orz,本以為a(x)較難做,結果b(x)比較奇怪... 到底是費氏數列的變形還是什麼... b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11.... 1 2 2 3 3 3 4 4 4 4 4 5 5 5 5 5 5 5 5 這裡看起來像是費氏數列,每一群的個數是前2群的個數總合 但範例裡的b(65)卻是9? 這個數列應該是 1 2 3 5 8 13 21 34 加總 1 3 6 11 19 32 54 88 b(x) 1 2 3 4 5 6 7 8 65落在54和88之間 所以b(65)應該是8吧? 下面的b(n)範例也蠻奇怪的... 我用double去算a(x),由於精確度的關係,當階乘太大時會有誤差 反正作業規定裡都寫別在意overflow了XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.94.210
snowflakeya:樓上的阿 真是辛苦囉 嘻嘻 10/18 19:14
lubirdcat:大感激>w<~~~ 10/18 19:21
epifire:規定不能一個main函數寫到底 自己把程式碼分開成函數吧 10/18 19:26
epifire:頂樓的每篇都推也辛苦了<(_ _)> 10/18 19:51
aptx4869gin:推! 果然是專業的@@" C++真有趣...orz 10/18 20:04
TRIU:庫喔~~ 10/18 21:17
quietrattan:郁袖你是說真的嗎~~~~C++很刺激ㄋㄟ... 10/18 22:06
DrummerFF:樓上說的是啊... 電腦也會感到刺激的, 怕c沒寫成被砸... 10/19 00:24
aptx4869gin:反諷啦XD 10/19 01:01