#P927. 猜数游戏
猜数游戏
背景 Background
刚学完二分法的蒟蒻。。。
描述 Description
在一档娱乐节目中,主持人让选手在规定次数内猜某物品的价格,若猜中了,就把物品奖给选手,某次竞猜的物品为价格在800-1200元的一款手机,选手开始报价:
选手:1000.
主持人:低了。
选手:1000.
主持人:高了。
选手:1050 ……
不难看出,在上述过程中,选手总是报竞猜前手机价格所在范围的中间值,这样显然可以使竞猜的次数最少。在数学运算中,也可以用类似的方法求函数的零点(使函数值为0的数)的近似值,我们称之为二分法,具体思路如下:(p.s.以下内容摘自数学必修一)
(1)确定初始区间[l,r],验证f(l)*f(r)<0,给定精确度ε;
(2)求区间(l,r)的中点m;
(3)计算f(m);
- 若f(m)=0,则m就是零点;
- 若f(l)*f(m)<0,则令r=m(此时零点包含于(l,m));
- 若f(m)*f(r)<0,则令l=m(此时零点包含于(m,r));
(4)判断是否达到精确度ε:即若r-l<ε,则得到零点近似值r(为方便取右端点),否则重复(2)-(4)。
现在挑战升级了,选手必须在给定区间和精确度内,猜出一个二次函数(f(x)=ax^2+bx+c)两个零点的近似值。
请你运用二分法解决问题,领走你的奖品。
输入格式 Input Format
输入格式:三行:
第一行:三个整数a,b,c,表示二次函数的二次项系数、一次项系数与常数项。
第二行:一个实数ε,表示给定的精确度。
第三行:两个整数l,r,表示零点所在初始区间的左右端点。
输出格式 Output Format
输出格式:一行:若输入的函数不是二次函数,或函数的零点少于两个,输出“Failed”;否则从小到大分别输出函数两个零点的近似值(结果区间的右端点),中间用空格隔开。
样例输入
1 -2 -5
0.000001
-50 50
样例输出
-1.44949 3.44949
数据范围
-1000<=a,b,c<=1000;0<ε<1;-1000000<=l<r<=1000000.
tips:对于所有数据:
1.函数两个零点均为无理数;
2.保证零点在初始区间范围内;
3.所有数据精度都在double范围内。
来源 Source
by刘恒远╮(╯▽╰)╭