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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值