1 条题解

  • 0
    @ 2025-4-27 18:52:59

    C++ :

    
    #include <stdio.h>
    #include <math.h>
    #define MIN_ERR 1e-4
    double a,b,c,d;
    double f(double x)
    {
    return a*x*x*x+b*x*x+c*x+d;
    }
    double find_sol(double min,double max)
    {
    if (max-min<MIN_ERR) return (min+max)/2;
    else
    {
    double f1,f2,f3;
    f1=f(min);
    f2=f((min+max)/2);
    f3=f(max);
    if (f2==0) return (min+max)/2;
    else if (f1*f2<0) return find_sol(min,(min+max)/2);
    else return find_sol((min+max)/2,max);
    }
    }
    main()
    {
    double x1,x2;
    scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
    if (a<0)
    {
    a=-a;
    b=-b;
    c=-c;
    d=-d;
    }
    x1=(-2*b-sqrt(4*b*b-12*a*c))/(a*6);
    x2=(-2*b+sqrt(4*b*b-12*a*c))/(a*6);
    printf("%.2lf %.2lf %.2lf\n",find_sol(-101,x1),find_sol(x1,x2),find_sol(x2,101));
    }
    

    Java :

    import java.util.Scanner;
    
    public class Main {
    	static double m[] = new double[3];
    	static int n=0;
    	static boolean f(int a, int b, int c, int d) {
    		for(double i=-100;i<=100;i++) {
    			if(a*i*i*i+b*i*i+c*i+d==0) {
    				m[n]=i;
    				n++;
    			}
    		}
    		if(Math.abs(m[0]-m[1])>=1 && Math.abs(m[0]-m[2])>=1 && Math.abs(m[1]-m[2])>=1) {
    			return true;
    		} else return false;
    		
    	}
    
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		int a = sc.nextInt();
    		int b = sc.nextInt();
    		int c = sc.nextInt();
    		int d = sc.nextInt();
    		if(f(a,b,c,d)) {
    			System.out.printf("%.2f ",m[0]);
    			System.out.printf("%.2f ",m[1]);
    			System.out.printf("%.2f ",m[2]);
    			}
    		sc.close();
    
    	}
    
    }
    
    • 1

    信息

    ID
    1288
    时间
    1000ms
    内存
    16MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者