先來知道一下費氏數列。 1,1,2,3,5,8,13,21,34,55,89,... 你會發現,下一項是由前一項和這一項所相加而成。 所以在解這道題目時,可以 先找出所有 小於1000000的費氏數列中的數 。 提示一下,總共有三十個數。(從1開始) 找到之後,再利用它來一一比對是否為該陣列的數。 c++程式碼: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 #include <iostream> using namespace std; int fib[ 32 ] = { 0 }; void fibb () { fib[ 1 ] = 1 ; fib[ 2 ] = 1 ; for ( int i = 1 ; i > 0 ; i ++ ) { fib[i +2 ] = fib[i] + fib[i +1 ]; //cout << "added" << endl; if (fib[i +2 ] > 1000000 ) { break ; } } } int isFib ( int a){ for ( int i = 1 ;i <=31 ; i ++ ){ if (a == fib[i]){ return i; } } return -1 ; } int main () { fibb(); int times; int question; cin >> times; for ( int i = 0 ; i < times; i ++ ){ cin >> question...
作者已經移除這則留言。
回覆刪除不好意思請教一下前面的try跟except 區塊是什麼?
回覆刪除因為沒有給測試資料的數量
刪除也就是不知道要執行input()多少次
這時候就必然執行的while迴圈一直讀資料
如果資料讀完了還執行input()
程式就會拋出exception (raise exception)
try:
//do something
except some_exception:
會接住try區塊拋出的, 類型為"some_exception" 的 exception
也就是說
在try區塊內的input()讀不到資料拋出拋出exception後
會被面的except接住
進而執行break跳出while迴圈
就降
另外
如果沒有指定要接住哪類型的exception
最好不要寫
except:
而是
except Exception:
如果只寫except而沒有指明要接住哪一種exception的話
會連KeyboardInterrupt都接住
進而使你無法以ctrl+c終止程式的執行
所以如果你在自己的電腦執行他寫的程式的話
會出現無法終止程式的小問題