本来一开始不知道三个解怎么用二分分出来。后面发现在二分外面套个遍历,把解集范围的整数全遍历一遍即可。
判断这个数和他后一位是否为解。若都不是则判断带入方程所得的数是否在y轴两侧。若是则有一解在其此范围内
import java.util.*;
import java.math.*;
public class Main {
static double a, b, c, d;
public static void main(String[]args) {
Scanner in = new Scanner(System.in);
a = in.nextDouble();
b = in.nextDouble();
c = in.nextDouble();
d = in.nextDouble();
int cnt = 0;
for(double i = -100 ; i < 100 ; ++ i ) {
if(figure(i) == 0 ) {
System.out.printf("%.2f",i);System.out.print(" ");
cnt++;
}else if(figure(i + 1) == 0) {
System.out.printf("%.2f",i + 1);System.out.print(" ");
i++;cnt++;
}
else if(figure(i) * figure(i + 1) < 0) {
//当i与i+1在一个根的两边时进行二分
double left = i, right = i + 1;
while(right - left > 1e-4) {
double mid = left + (right - left) / 2.0;
if(figure(left) * figure(mid) < 0) {
right = mid;
}else {
left = mid;
}
}
System.out.printf("%.2f",right);
System.out.print(" ");cnt++;
}
if(cnt == 3)break;
}
}
public static double figure(double x) {
return ((a * x + b)* x + c) * x + d;
}
}