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 ...