カメヲラボ

主にプログラミングとお勉強全般について書いてます

Fibonacci

http://acm.pku.edu.cn/JudgeOnline/problem?id=3070
入力Nに対して、フィボナッチ数列のN項目の下4桁を表示しなちゃい、という問題。ゴルフでrubyばっかり使っていたせいでセミコロンを忘れまくる。対策としては、セミコロンが少なくて済むように短く書く(笑)
というわけで、とりあえず書いてみた95B

a;
main(b,t,n){
  for(;b=scanf("%d",&n),~n;a=!printf("%d\n",a))
    for(;n--%15000;a=b,b=t%10000)t=a+b;
}

forは1回の方が短いのか、試してないので知らないです。ポイントは、下4桁の場合15000項で一周期というところでしょうか。事前に計算しておかなくても、TLEにはなりませんでした。
計算部分がもうちょっと賢い方法ありそうなかんじですね。

追記:
kurimuraさんのアドバイスを参考に、91Bで仕上げました。

main(a,b,n){
  for(;b=scanf("%d",&n),~n;printf("%d\n",a))
    for(a=0;n--%'u0';a=(b-a)%10000)b+=a;
}

15000はリテラルに出来なかったので、倍数の30000を使用。GCC/C共に通ります。