'NOIP 2010' 일원 3 차 방정식 구 해 - 분 치
x 3 + b * x2 + cx + d = 0 과 같은 1 원 3 차 방정식.이 방정식 의 각 계수 (a, b, c, d 는 모두 실수) 를 제시 하고 이 방정식 에 세 개의 서로 다른 실 근 (뿌리의 범 위 는 - 100 에서 100 사이) 이 존재 하고 뿌리 와 뿌리의 차 이 는 절대 치 > = 1 이 존재 한다 고 약정 한다.작은 줄 에서 큰 줄 로 이 세 개의 실 근 (뿌리 와 뿌리 사이 에 빈 칸 이 남아 있 음) 을 순서대로 출력 하고 소수점 뒤의 두 자리 까지 정확하게 해 야 한다.
입력 형식
한 줄 은 네 개의 실수 a, b, c, d 를 포함 하고 인접 한 두 개의 수 사 이 를 하나의 빈 칸 으로 분리 합 니 다.
출력 형식
한 줄 은 세 개의 실 수 를 포함 하고 이 방정식 의 세 개의 실 근 을 포함 하 며 작은 것 에서 큰 순서 로 배열 하고 인접 한 두 개의 수 사 이 를 하나의 빈 칸 으로 나 누 어 소수점 뒤의 두 자리 까지 정확하게 한다.
샘플 입력
1.0 -5.0 -4.0 20.0
샘플 출력
-2.00 2.00 5.00
분석 하 다.
이 문 제 는 사실 분 치 된 문제 다.이 문 제 를 풀기 위해 서 는 먼저 지식 을 알 아야 한다. 임 의 함수 f (x) f (x) f (x) 는 [a, b] [a, b] [a, b] [a, b] 사이 에 영점 이 있 으 면 f (a)× f ( b ) ≤ 0 f(a)\times f(b)\leq 0 f(a)×f(b)≤0。이것 도 증명 하기 쉽다. [a, b] [a, b] [a, b] 사이 에 영점 이 있 기 때문에 f (a), f (b) f (a), f (b) f (a), f (a), f (b) 는 반드시 다른 번호 가 있 기 때문에 곱셈 은 반드시 0 0 보다 작 을 것 이다.사실 그의 역명 제 도 성립 되 었 다. 그러면 이 판단 에 따라 [a, b] [a, b] [a, b] 사이 에 영점 이 있 는 지 없 는 지 를 판단 할 수 있다.그리고 2 점 만 진행 하면 됩 니 다.
코드
#include
#include
#include
#include
using namespace std;
double a,b,c,d;
double f(double x) {
return x*x*x*a+x*x*b+x*c+d;
}
void Find(double l,double r) {
if (r-l<0.005) {
printf("%.2lf ",l);
return;
}
double mid=(l+r)/2;
if (f(mid)==0) {
printf("%.2lf ",mid);
return;
}
if (f(mid)*f(l)<0) Find(l,mid);
else if (f(mid)*f(r)<0) Find(mid,r);
}
int main() {
scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
for (double i = -100;i < 100;i++) {
if (f(i)==0) {
printf("%.2lf ",i);
continue;
}
if (f(i)*f(i+1)<0) Find(i,i+1);
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
SDNU 1168.FBI 트리[NOIP 2004 보급팀][부건수][7월 28]FBI 트리 문제를 푸는 사고방식은 한 가지가 아니라 아마도 더 좋은 풀이가 있을 것이다.영감은 한순간에 우리는'0'과'1'으로 구성된 문자열을 세 종류로 나눌 수 있다.'0'열을 B열,'1'열을 I열,'0'과'1'...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.