穷举法算法练习
Problem1:求解一元三次方程问题
-
Problem Description
有一个一元三次方程ax3+bx2+cx+d=0,给出所有的系数,并规定该方程存在3个不同的实根(根范围为-100~100),且根与根之差的绝对值>=1。要求从小到大一次在同一行输出这3个根,并精确到小数点后两位。
-
Input
包含4个实数,a,b,c,d,各实数之间用空格隔开。
-
Output
从小到大的3个实根。各跟之间用空格隔开。
-
Sample Input
1 -5 -4 20
-
Sample Output
-2.00 2.00 5.00
-
解题思路
- 穷举法。查找取值范围i为-100到100,步长为0.01,为了方便运算,将i扩大100倍,即i为-10000~10000,步长为1,再将x=i/100。
- f=ax3+bx2+cx+d,如果 | f | <0.0001,则对应根与根之差的绝对值>=1。满足根的条件,即为x的一个解。
-
Answer
#include <stdio.h> #include <stdlib.h> double a,b,c,d; void sort(){ //控制空格,输出空格间隔 int num = 0; for(int i=-10000;i<10000;i++){ double x=i/100.0; double f=a*x*x*x+b*x*x+c*x+d; if (f>-0.0001&&f<0.0001){ //保留小数点后两位 printf("%.2f",x); if (num!=2) { printf(" "); } num++; } } } int main() { scanf("%lf %lf %lf %lf",&a,&b,&c,&d); sort<