作者epifire (NEO UNIVERSE)
看板RSSH93_301
標題Re: 誰可以教我程設
時間Tue Oct 18 18:47:55 2005
#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