ZCMU 1347 又是斐波那契數列

2021-08-21 14:48:38 字數 1466 閱讀 6977

time limit: 1 sec  memory limit: 128 mb

submit: 592  solved: 203

在數學中斐波那契數列f是這樣定義的:f(n)=f(n-1)+f(n-2),f(0)=1,f(1)=1。現在我有另外乙個序列g,g(n)=g(n-1)+g(n-2),g(0)=1,g(1)=t(t>=1)。

你的任務對於給定的i,g(i)和j輸出g(j)。

多組測試資料,對於每組測試資料報含三個正整數i,g(i),j。1 <= i,j <=20, g(i)<100000。

對於每組資料,如果t存在輸出對應的g(j)的值,否則輸出-1。

1 1 2

3 5 4

3 4 6

12 17801 19

-1題解:之前看到這樣的題目是一點也不想做的感覺,規律其實很好找。把題目給的資料帶進去算一下就能發現下表。不過建議不要用斐波那契數列作為係數,會導致後來的分類討論比較麻煩。

ig[i]

t的係數

常數的係數

斐波那契數列f()01

none11

1t10

121+t112

31+2*t21

342+3*t32

553+5*t53

865+8*t85

13...

......

......

斐波那契數列f()01

1122

3345

......

找出公式g[i]=f(i-1)*t+f(i-2);

t=1.0*(g[i]-f(i-2))/f(i-1));

根據題目講的輸入為三個正整數可知,g[i]為正整數,而t屬於g[i],那麼判斷條件就是如果t不是整數,輸出-1.(這裡卡了我好久qq)。

關於判斷t是否為整數的辦法:判斷被除數%除數是否為0,如果為0,說明整除。(昨晚肯定是傻了這裡也卡了)。

hz同學告訴我說用(int)t==t這種判斷方法並不好,精度問題。

還有一種判斷方法也不行,就是*10之後取整再%10,如果t=1.01則不行。

但是題目交了一遍又一遍,之前是runtime error(沒有判斷i不等於1的時候j如果等於1的情況,輸入5 8 1 沒有輸出),後來是wa,測試資料(輸入1 0 1  輸出-1)坑了我qq

#includelong long f(long long n)   //斐波那契數列

int main()

else if(t>=1)

printf("%.f\n",f(j-1)*t+f(j-2));

else

printf("-1\n");

//continue; 某學長說要吃bazhang?

}else

else

printf("%.f\n",f(j-1)*t+f(j-2));

}else}}

return 0;

}

又是斐波那契數列??

現在給你乙個數x,聰明的你一定知道這是斐波那契數列中的第幾項。資料保證x一定有對應的項y,且 2 y 1e4 第一行乙個整數t,表示測試組數。之後的t行,每行乙個數x 對於每個測試資料,輸出一行表示數x是第幾項 2 253 5 include include include include incl...

斐波那契數

入門訓練 fibonacci數列 時間限制 1.0s 記憶體限制 256.0mb 問題描述 fibonacci數列的遞推公式為 fn fn 1 fn 2,其中f1 f2 1。當n比較大時,fn也非常大,現在我們想知道,fn除以10007的餘數是多少。輸入格式 輸入包含乙個整數n。輸出格式 輸出一行,...

斐波那契數

斐波那契數列 fibonacci sequence 簡介 斐波那契數列 fibonacci sequence 又稱 分割 數列 因 數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 ...