1. 程式人生 > >一元三次方程解法

一元三次方程解法

  有形如:ax3+bx2+cx+d=0  這樣的一個一元三次方程。給出該方程中各項的係數(abcd  均為實數),並約定該方程存在三個不同實根(根的範圍在-100100之間),且根與根之差的絕對值>=1。要求由小到大依次在同一行輸出這三個實根(根與根之間留有空格),並精確到小數點後2位。
提示:記方程
f(x)=0,若存在2個數x1x2,且x1<x2f(x1)*f(x2)<0,則在(x1x2)之間一定有一個 根。

輸入描述 Input Description

一個三次方程的各項係數

輸出描述 Output Description

三個解

樣例輸入 Sample Input

1   -5   -4   20

樣例輸出 Sample Output

-2.00   2.00   5.00

#include <stdio.h>
#include <math.h>
double a=0,b=0,c=0,d=0;

double getF(double);
double search(double,double);

int main(void)
{
	double i=-100;   //i用於從-100自增到100,尋找根的位置
	double tmp=0,tmpi=-100,result=0;  //tmp用於接收每個點的f(x)值,tmpi用於接收左邊一端的i,result用於接收結果
	scanf("%lf %lf %lf %lf",&a,&b,&c,&d);
	tmp=getF(-100);
	for(i=-99;i<=100;i++){
	
		if(fabs(tmp*getF(i))<=1e-4){
			tmpi = i+1;
			tmp = getF(tmpi);
			printf("%.2lf ",i);
		}else if(tmp*getF(i)<0){
			printf("%.2lf ",search(tmpi,i));
			tmpi = i+1;
			tmp = getF(tmpi);
		}
	}
	return 0;
}
double search(double a,double b)
{
	double c = (a+b)/2;
	while(fabs(getF(c))>=1e-4)
	{
		if(getF(c)*getF(a)>0)
		{
			a = c;
		}
		else if(getF(c)*getF(b)>0)
		{
			b = c;
		}
		c = (a+b)/2;
	}
	return c;
}
double getF(double x)
{
	return a*x*x*x+b*x*x+c*x+d;
}


相關推薦

一元方程解法

  有形如:ax3+bx2+cx+d=0  這樣的一個一元三次方程。給出該方程中各項的係數(a,b,c,d  均為實數),並約定該方程存在三個不同實根(根的範圍在-100至100之間),且根與根之差

一元方程

同一行 提示 int 是我 分享圖片 == include urn opened 題目描述 有形如:ax3+bx2+cx+d=0 這樣的一個一元三次方程。給出該方程中各項的系數(a,b,c,d 均為實數),並約定該方程存在三個不同實根(根的範圍在-100至100之間),且根

洛谷 [P1024]一元方程求解【二分答案】

https 格式 -m 要求 ble 方程 print else 如果 題目鏈接:https://www.luogu.org/problemnew/show/P1024 題目描述 有形如:ax3+bx2+cx+d=0 這樣的一個一元三次方程。給出該方程中各項的系數(a,

luogu1024 一元方程求解

iostream ble tar names 註意 stream 左右 ret == 題目大意 已知一元三次方程\(ax^3+bx^2+cx+d=0\): 有且只有3個根 對\(\forall x, x\in[-100,100]\) 對\(\forall x_1,x_2,

洛谷 P1024 一元方程求解

cstring stream () pro fin targe target bsp reg       洛谷 P1024 一元三次方程求解 題目描述 有形如: ax3 + bx2 + cx1 + dx0 = 0 這樣的一個一元三次方程。給出該方程中各項的系數( a,b,c

一元不等式和一元不等式解法的思考

可能 記得 兩種 但是 延續 bsp 是什麽 我們 同時 說起一元二次不等式的解法真的不記得了,只是大概記得和一元二次方程的兩個根有關系。 (x+1)(x-3)<0 這個不等式的集解如果熟悉解法的同學可能一秒就知道答案了,-1<x<3 對於不熟悉解法的

[P1034][NOIP2001]一元方程求解 (二分)

二分 #include<bits/stdc++.h> using namespace std; double a,b,c,d; double fc(double x) { return a*pow(x,3)+b*pow(x,2)+c*x+d; } int main()

題解 luogu P1024 【一元方程求解】

這道題的二分原理題目已給出:f(x)*f(x+1)<0時,x至x+1中必有一根。那麼,我們只需要迴圈-100至100,再用分治考慮小數部分就可以了。下面附上程式碼: #include<bits/stdc++.h> using namespace std; double

zcmu-2116: 一元方程求解(二分,列舉)

2116: 一元三次方程求解 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 76  Solved: 31 [Submit][Status][Web

【Openjudge:Noi】7891:一元方程求解 c++

【Openjudge:Noi】7891:一元三次方程求解 總時間限制:  1000ms 記憶體限制:  65536kB 描述 有形如:ax3+bx2+cx+d=0  這樣的一個一元三次方程。 給出該方程中各項的係數(a,b,c,d  均為實數),並約定該方程

藍橋杯一元方程求解

問題描述   有形如:ax3+bx2+cx+d=0 這樣的一個一元三次方程。給出該方程中各項的係數(a,b,c,d 均為實數),並約定該方程存在三個不同實根(根的範圍在-100至100之間),且根與根

演算法訓練 一元方程求解 藍橋杯

問題描述   有形如:ax3+bx2+cx+d=0 這樣的一個一元三次方程。給出該方程中各項的係數(a,b,c,d 均為實數),並約定該方程存在三個不同實根(根的範圍在-100至100之間),且根與根之差的絕對值>=1。要求三個實根。。 輸入格式   四個實

一元方程-盛金公式求解

原理參考-百度百科(http://baike.baidu.com/link?url=eA-bEvbcOBM2XmA4rzIG-lgci4MQdQcr7lCzCHBW-qG-qcPaDNovXp_jYxS2FUjlrOh1obH_D3Yv6ME2JYOxPyCgKhHIaXC

某葉C語言學習上重大的一步——一元方程求解

 目前某葉編的最難的程式了......感覺算是跨越吧,之前最難的是一元二次方程求解,雖然是最“難”的,只是因為最長,但是寫起來還是很輕鬆的  不過一元三次方程可一點都不輕鬆,很累,因為沒學過一元三次方程解法,所以需要百度,不過在C語言學習的書上找到了解法,要用牛頓迭代法求......   百度娘處充電,勉勉

藍橋網 演算法訓練 一元方程求解

問題描述   有形如:ax3+bx2+cx+d=0 這樣的一個一元三次方程。給出該方程中各項的係數(a,b,c,d 均為實數),並約定該方程存在三個不同實根(根的範圍在-100至100之間),且根與根之差的絕對值>=1。要求三個實根。。 輸入格式   四個實數:a,b

一元方程 (codevs 1038)題解

【問題描述】      有形如:ax3+bx2+cx+d=0這樣的一個一元三次方程。給出該方程中各項的係數(a,b,c,d均為實數),並約定該方程存在三個不同實根(根的範圍在-100至100之間),且根

C++求解一元方程

#include<iostream> #include<cmath> #include<iomanip> using namespace std; double fx(double nparam[3],double x) {  <s

【資料結構查詢】POJ1840——求五元方程的整數解個數

問題描述: 給定五元三次方程的全部係數,求出解不等於0且為[−50,50][-50,50][−50,50]之間的整數的個數。 求解方法: 將後兩項移到等式的右邊,並將前三項的全部結果遍歷出來並打表

關於方程的一道題

三次方程的一道題 前幾天在水木社群數學版看到了一道題,題目如下: 設 x3−3x−1=0x^3-3x-1=0x3−3x−1=0 有三個實根從小到大依次x1x_1x1​、x2x_2x2​、x3x_3x3​,求證: x32−x22=x3−x1 x_3^2-x_2^2

一元方程為什麼沒有12個解

高等代數的教科書裡面講到使用Ferrari(費拉里)解法求解四次方程時,從三次方程求得u的三個根,如果依次代入分解後得兩個二次方程引數,最後求的四次方程得解,如果對每一個u四次方程都有解那麼4個解,那麼是不是最後有3∗4=123*4=123∗4=12個解呢?很多