题目:
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这三个数就会发生特例错误,要拿出来单独判定。