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這三個數就會發生特例錯誤,要拿出來單獨判定。

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