2010年11月9日火曜日

TopCoder 練習 FibonacciPositioning(SRM298 Div1 Easy)

ニコ生にて,診断人さんがTopCoderの問題を解きまくっていたので,途中から便乗参加.

FibonacciPositioning(SRM298 Div1 Easy)

■問題
Fibonacci positionという値を定義する.n番目のFibonacci数をFn,Fibonacci positionをFPnとする時,FPnは以下の通り.

FP1=2
Fi=nの時,FPn=i
Fi<n<Fi+1の時,FP=i+(n-Fi)/(Fi+1-Fi)

FPnを求めよ.

■解法
問題の通り愚直に実装すればOK.

  1. public class FibonacciPositioning{  
  2.  public double getFPosition(int n){  
  3.   if(n==1return 2.0;  
  4.   long a=1,b=1;  
  5.   for(int i=1;;i++){  
  6.    if(n==a)  
  7.     return i;  
  8.    if(a<n&&n<b)  
  9.     return i+(double)(n-a)/(b-a);  
  10.    a+=b;  
  11.    long t=a; a=b; b=t;  
  12.   }  
  13.  }  
  14. }  

0 件のコメント: