題目:
ChenJr選擇了三個連續的斐波納契數列Fn,Fn+1,Fn+2,並把它們打亂順序,並在下列二次方程中用A,B,C指代他們:
Ax2+Bx+C=0
現在ChenJr讓你告訴他,在這個式子中有多少個不同的實數根。
Input
第一行有三個整數i,j,k (0≤i,j,k≤109),代表斐波納契數列。其中A=Fi,B=Fj,C=Fk。數據保證i,j,k互不相等且他們之中最大的與最小的差值不超過2。
Output
輸出一個整數,代表這個式子中有多少個不同的實數根。
Example
inputCopy
1 2 3
outputCopy
0
Note
在斐波那契數列中
F0=0F1=1Fn=Fn−1+Fn−2 (i>1)
我們爲方便把3個數分爲小數,中數,大數,小+中=大。
這個題就是看b^2-4ac的值是大於零還是等於零還是小於零,於是就會討論,如果b是大數,打個表:發現b ^2-4ac一直都是正數(注意,先不考慮比較小的斐波那契數)同時如果是b是中數,這個竟然發現b ^2和ac相差無幾,但是多了個4*,於是4ac完勝b ^2,於是我們就可以知道:
if(i+j+k==3)
{
if(i==0)printf("1\n");
else if(j==0)printf("0\n");
else printf("2\n");
}
else if(i+j+k==6&&j!=3)printf("0\n");
else if(i+j+k==6&&j==3)printf("1\n");
else
{
if(i+k>=j*2)printf("0\n");
else printf("2\n");
}
ah,爲什麼會有i+j+k等於3呢?這就是說的,小數的特例,如果是1 1 2這三個數就會發生特例錯誤,要拿出來單獨判定。