Description
Now please try your lucky.
Input
Output
Sample Input
2 100 -4
Sample Output
1.6152 No solution!
AC代码
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main()
{
int t;
scanf("%d", &t);
while( t-- )
{
double y, yy, low = -1, high = 101, midx; //醉翁之意不在酒
scanf("%lf", &y);
while( high-low>1e-9 )
{
midx = (high+low)/2.0;
yy = 8*midx*midx*midx*midx + 7*midx*midx*midx + 2*midx*midx + 3*midx + 6;
if( y-yy>0 )
low = midx;
else if( yy-y>0 )
high = midx;
}
if( midx>=0.0 && midx<=100.0 )
printf("%.4lf\n", midx);
else
printf("No solution!\n");
}
return 0;
}
虽然问了小伙伴才AC的,但是真是学到了一点东西,开心
另一个是看了人家的代码之后AC的代码,就是判断输出的方式不同,也是不同的思想
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
double equa( double x )
{
return 8*x*x*x*x + 7*x*x*x + 2*x*x + 3*x + 6;
}
int main()
{
int t;
scanf("%d", &t);
while( t-- )
{
int flag = 0;
double y, yy, low = 0, high = 100, midx;
scanf("%lf", &y);
double M = equa(100.0);
double m = equa(0.0);
if( y<m || y>M ) //醉翁之意不在酒
{
printf("No solution!\n");
flag = 1;
continue;
}
while( high-low>1e-9 )
{
midx = (high+low)/2.0;
yy = equa(midx);
if( y-yy>1e-9 )
low = midx+1e-9;
else if( yy-y>1e-9 )
high = midx-1e-9;
}
if( !flag )
printf("%.4lf\n", midx);
}
return 0;
}