2 분 1238: 1 원 3 차 방정식 의 풀이
11166 단어 이분
이 방정식 에서 각 항의 계수 (a, b, c, d 는 모두 실수) 를 제시 하고 이 방정식 에 세 개의 서로 다른 실근 (뿌리의 범 위 는 − 100 에서 100 사이) 이 존재 하고 뿌리 와 뿌리의 차 이 는 절대 치 ≥ 1 이 존재 한다 고 약정 한다.작은 줄 에서 큰 줄 로 이 세 개의 실 근 (뿌리 와 뿌리 사이 에 빈 칸 이 남아 있 음) 을 순서대로 출력 하고 소수점 뒤의 두 자리 까지 정확하게 해 야 한다.
[입력] 한 줄 은 네 개의 실수 a, b, c, d 를 포함 하고 인접 한 두 개의 수 사 이 를 하나의 빈 칸 으로 분리 합 니 다.
[출력] 한 줄 은 세 개의 실 수 를 포함 하고 이 방정식 의 세 개의 실 근 을 포함 하 며 작은 것 에서 큰 순서 로 배열 하고 인접 한 두 개의 수 사 이 를 하나의 빈 칸 으로 나 누 어 소수점 뒤의 두 자리 까지 정확하게 한다.
[샘플 입력] 1.0 - 5.0 - 4.0 20.0 [출력 샘플] - 2.02.00 5.00
사고: 1 원 3 차 함수 에 대한 가이드, 1 원 2 차 방정식, 그리고 가이드 함 수 는 0 과 같 습 니 다. 공식 법 으로 가이드 함수 의 두 개의 뿌리 를 계산 합 니 다. 이 두 개의 뿌리 는 바로 두 개의 극치 점 입 니 다. 각각 x1 과 x2 로 기록 한 다음 에 이분법 에 따라 각각 [- 100, x1], [x1, x2], [x2, 100] 이 세 구간 에서 영점 을 찾 습 니 다.
#include
#include
#include
#include
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
const int N=1e4+5;
double a,b,c,d;
double f(double x)
{
return a*x*x*x+b*x*x+c*x+d;
}
double g(double L,double R)
{
double l=L,r=R,mid,t;
int flag=f(l)>0?1:0;
while(fabs(l-r)>1e-3)
{
mid=(l+r)/2;
t=f(mid);
if(t==0)
break;
else if(t>0)
{
if(flag)
l=mid;
else
r=mid;
}
else
{
if(flag)
r=mid;
else
l=mid;
}
}
return mid;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> a >> b >> c >> d;
double x1=(-2*b+sqrt(4*b*b-12*a*c))/(6*a);
double x2=(-2*b-sqrt(4*b*b-12*a*c))/(6*a);
if(x1>x2)
swap(x1,x2);
printf("%.2f %.2f %.2f
",g(-100,x1),g(x1,x2),g(x2,100));
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
|NOIOJ|2분|04: 네트워크 관리자심판위원회는 인터넷 라인을 구매하기 위해 현지의 한 인터넷 솔루션 제공 업체에 연락하여 일정한 수량의 등장망 라인을 제공할 수 있도록 요구했다.심판위원회는 네트워크가 길어질수록 좋아져 선수들 사이의 거리가 가능한 한...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.