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.

public class FibonacciPositioning{
public double getFPosition(int n){
if(n==1) return 2.0;
long a=1,b=1;
for(int i=1;;i++){
if(n==a)
return i;
if(a<n&&n<b)
return i+(double)(n-a)/(b-a);
a+=b;
long t=a; a=b; b=t;
}
}
}

0 件のコメント: