信息奥赛一本通(1058:求一元二次方程)
1058:求一元二次方程
時間限制: 1000 ms ??? ??? 內存限制: 65536 KB
提交數: 83135 ??? 通過數: 14037
【題目描述】
利用公式x1=?b+b2?4ac√2a,x2=?b?b2?4ac√2ax1=?b+b2?4ac2a,x2=?b?b2?4ac2a,求一元二次方程ax2+bx+c=0ax2+bx+c=0的根,其中aa不等于00。結果要求精確到小數點后55位。
【輸入】
輸入一行,包含三個浮點數a,b,ca,b,c(它們之間以一個空格分開),分別表示方程ax2+bx+c=0ax2+bx+c=0的系數。
【輸出】
輸出一行,表示方程的解。
若兩個實根相等,則輸出形式為:“x1=x2=...x1=x2=...”;
若兩個實根不等,在滿足根小者在前的原則,則輸出形式為:“x1=...;x2=...x1=...;x2=...“;
若無實根輸出“No answer!”。
所有輸出部分要求精確到小數點后5位,數字、符號之間沒有空格。
【輸入樣例】
-15.97 19.69 12.02【輸出樣例】
x1=-0.44781;x2=1.68075【分析】
disc=0,兩個相等實根,判斷方法,誤差法,fabs(disc-0)<13-6
【參考代碼】
#include <stdio.h>
#include <math.h>
int main()
{
??? double a,b,c,disc,x1,x2,t;
??? scanf("%lf%lf%lf",&a,&b,&c);
??? disc=b*b-4*a*c;
??? if(fabs(disc)<1e-6)
??? {
??????? printf("x1=x2=%.5lf\n",(-b)/(2*a));
??? }
??? else if(disc>0)
??? {
??????? x1=(-b+sqrt(disc))/(2*a);
??????? x2=(-b-sqrt(disc))/(2*a);
??????? if(x1>x2)
??????? {
???????? t=x1;
???????? x1=x2;
???????? x2=t;
}
??????? printf("x1=%.5lf;x2=%.5lf\n",x1,x2);
??? }
??? else
??? {
??????? printf("No answer!");
??? }
??? return 0;
}
http://ybt.ssoier.cn:8088/problem_show.php?pid=1058
總結
以上是生活随笔為你收集整理的信息奥赛一本通(1058:求一元二次方程)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 应用内隐私政策 格式规范
- 下一篇: 不小心删除的文件怎么找回?