1. 程式人生 > >藍橋杯一元三次方程求解

藍橋杯一元三次方程求解

問題描述

  有形如:ax3+bx2+cx+d=0 這樣的一個一元三次方程。給出該方程中各項的係數(abcd 均為實數),並約定該方程存在三個不同實根(根的範圍在-100100之間),且根與根之差的絕對值>=1。要求三個實根。。

輸入格式

  四個實數:abcd

輸出格式

  由小到大依次在同一行輸出這三個實根(根與根之間留有空格),並精確到小數點後2

樣例輸入

1-5 -4 20

樣例輸出

-2.00 2.005.00

解題思路:

根的範圍在-100--100之間,且要精確到後倆位,我們可以把根的範圍過大100倍,x1=(x-0.05)/100,x2=(x+0.05)/100,根據根的特點可以確定f(x1)*f(x2)<0,

因此遇到這種情況即是滿足情況的解。

#include<cstdio>

float a,b,c,d;
float f(float x){
	return x*x*x+b*1.00/a*x*x+c*1.00/a*x+d*1.00/a;
}
int main(){
	scanf("%f%f%f%f",&a,&b,&c,&d);
	for(int x=-10000;x<10000;x++){            //精確到後兩位,則在這裡擴大到100倍 
		float x1=(x-0.05)*1.00/100,x2=(x+0.05)*1.00/100;     //擴大了100倍要除回來 
		if(f(x1)*f(x2)<0)   
			printf("%.2f ",x*1.00/100);
	}
	printf("\n");
	return 0;
}