10341 - Solve It
Time limit: 3.000 seconds
Solve the equation:
p*e-x + q*sin(x) + r*cos(x) + s*tan(x) + t*x2 + u = 0
where 0 <= x <= 1.
Input
Input consists of multiple test cases and terminated by an EOF. Each test case consists of 6 integers in a single line: p, q, r, s, tand u (where 0 <= p,r <= 20 and -20 <= q,s,t <= 0). There will be maximum 2100 lines in the input file.
Output
For each set of input, there should be a line containing the value of x, correct upto 4 decimal places, or the string "No solution", whichever is applicable.
Sample Input
0 0 0 0 -2 1
1 0 0 0 -1 2
1 -1 1 -1 -1 1
Sample Output
0.7071
No solution
0.7554
#include <iostream> #include <cstdio> #include <cmath> using namespace std; double p, q, r, s, t, u; double f(double x) { double temp; temp = p * exp(-x) + q * sin(x) + r * cos(x) + s * tan(x) + t * x * x + u; return temp; } int main() { while (scanf("%lf%lf%lf%lf%lf%lf", &p, &q, &r, &s, &t, &u) != EOF) { double high = 1.0, low = 0.0, mid; for (int i = 0; i < 100; i ++) { mid = (high + low) / 2; if (f(mid) > 0) { low = mid; } else { high = mid; } } if (fabs(f(mid) - 0.0) < 1e-8) { printf("%.4lf\n", mid); } else { printf("No solution\n"); } } return 0; }
Mustaq Ahmed