GDUT_排位赛题解报告_第5场_G. 斐波那契数列

题目:

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章