zoukankan      html  css  js  c++  java
  • 【2031】求一元三次方程的解

    Time Limit: 3 second
    Memory Limit: 2 MB

    有形如ax^3+bx^2+cx+d=0的一个一元三次方程。给出该方程中各项的系数(a,b,c,d均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的绝对值≥1。要求由小到大依次在同一行输出这三个实根。(根与根之间留有空格),并精确到小数点后2位。

    Input

    输入文件仅一行
    依次输入a,b,c,d用空格隔开

    Output

    输出仅一行,三个实根(根与根之间留有空格,最后用回车结束)

    Sample Input

    1 -5 -4 20
    
    

    Sample Output

    -2.00 2.00 5.00

    【题解】

    从-10000枚举到10000,然后除100,得到的就是-100.00到100.00,然后代入f函数,算出函数值,每次取两个值f(x1),f(x2),如果f(x1)*f(x2)<0,则表明x1-x2之间有一个解,这里我直接输出x1。因为是浮点数 所以等号无效。则相等要写成f(x)-0<0.000.......这样的形式.判断一下f(x1)或f(x2)是否近似等于0,如果是则直接输出x1或x2.

    【代码】

    #include <cstdio>
    
    double a,b,c,d;
    double ans[100];
    int number = 0;
    
    void input_data()
    {
    	scanf("%lf %lf %lf %lf",&a,&b,&c,&d); //输入a,b,c,d 
    }	
    
    double get_number(double x) //计算f(x)函数 
    {
    	double ans = a*x*x*x+b*x*x+c*x+d;
    	return ans;
    }
    
    void get_ans()
    {
    	int i = -10010; //开始枚举 
    	while (i <= 10010)
    		{
    				double temp1 = i;
    				double temp2 = i+1;
    				temp1 = temp1/100;
    				temp2 = temp2/100;
    				double d1,d2;
    				d1 = get_number(temp1);d2 = get_number(temp2);
    				//获取f(x1)和f(x2) 
    				double j = d1 * d2; //计算f(x1)*f(x2) 
    				if (j <=0)  //判断符号 
    					{
    						if ((0-j) < 0.00001) //如果这个值无限接近0 
    							{
    								if (d1 <0) d1=-d1;
    								if (d2 <0) d2=-d2;
    								if ((d1-0) <0.00001) ans[++number] = temp1; 
    									else 
    										ans[++number] = temp2;	
    								//判断一下哪一个值是等于0,则增加1解 
    							}	
    								else
    									{
    										ans[++number] = temp1;
    									}
    						i+=98; //有提到两个解之间的差>1,则直接+100 
    					} 
    						else
    							i++;
    		}
    }
    
    void output_ans()
    {
    	printf("%.2lf %.2lf %.2lf
    ",ans[1],ans[2],ans[3]);	//输出要用.xlf,x为保留位数 
    }
    
    int main()
    {
    	//freopen("E:\rush.txt","r",stdin);
    	input_data();
    	get_ans();
    	output_ans();
    	return 0;	
    }
    


     

  • 相关阅读:
    matplotlib直方图学习小记
    matplotlib饼状图学习小记
    P2306 被yyh虐的mzc
    P1776 宝物筛选_NOI导刊2010提高(02)&& 多重背包二进制优化
    51NOD 1445 变色DNA
    51NOD 1459 迷宫游戏
    CODEVS 1001 舒适的路线
    P4514 上帝造题的七分钟
    1082 线段树练习 3 && 树状数组区间修改区间查询
    P4145 上帝造题的七分钟2 / 花神游历各国
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7632499.html
Copyright © 2011-2022 走看看