Can you solve this equation?
二分,精度控制
#include <bits/stdc++.h>
using namespace std;
// 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6
#define f(x) (x*(x*(x*(x*8+7)+2)+3)+6)
double binSearch(double l, double r, double val){
double mid;
while(r - l > 1e-7){
mid = (l+r)/2;
if(f(mid) > val) r = mid;
else l = mid;
}
return (l+r)/2;
}
int main(){
int T;
double y, f0 = f(0.0), f100 = f(100.0);
scanf("%d", &T);
while(T--){
scanf("%lf", &y);
if(y < f0 || y > f100){
printf("No solution!\n");
continue;
}
printf("%.4f\n", binSearch(0, 100, y));
}
return 0;
}
二分,多次迭代
#include <bits/stdc++.h>
using namespace std;
// 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6
#define f(x) (x*(x*(x*(x*8+7)+2)+3)+6)
double solve(double l, double r, double val){
double mid;
for(int i = 1; i <= 100; i++){
mid = (l+r)/2;
if(f(mid) > val) r = mid;
else l = mid;
}
return (l+r)/2;
}
int main(){
int T;
double y, f0 = f(0.0), f100 = f(100.0);
scanf("%d", &T);
while(T--){
scanf("%lf", &y);
if(y < f0 || y > f100){
printf("No solution!\n");
continue;
}
printf("%.4f\n", solve(0, 100, y));
}
return 0;
}