hdu2199_Can you solve this equation?
2015-07-23 08:45
239 查看
Can you solve this equation?
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d
& %I64u
Submit Status
Description
Now,given the equation 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y,can you find its solution between 0 and 100;
Now please try your lucky.
Input
The first line of the input contains an integer T(1<=T<=100) which means the number of test cases. Then T lines follow, each line has a real number Y (fabs(Y) <= 1e10);
Output
For each test case, you should just output one real number(accurate up to 4 decimal places),which is the solution of the equation,or “No solution!”,if there is no solution for the equation between 0 and 100.
Sample Input
Sample Output
这个题二分比较明显,但是二分法要注意返回的值,返回不同的值有精度问题。
#include <stdio.h>
#include <math.h>
double an(double x)
{
return 8*pow(x,4)+7*pow(x,3)+2*pow(x,2)+3*x+6;
}
double bs(double low,double high,double y)
{
double mid;
while(high-low>1e-7)
{
mid=(high+low)/2;
if(an(mid) > y) high=mid;
else low=mid;
}
return high;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
double y;
scanf("%lf",&y);
if(y<an(0)||y>an(100.0))
printf("No solution!\n");
else
printf("%.4lf\n",bs(0,100,y));
}
return 0;
}
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d
& %I64u
Submit Status
Description
Now,given the equation 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y,can you find its solution between 0 and 100;
Now please try your lucky.
Input
The first line of the input contains an integer T(1<=T<=100) which means the number of test cases. Then T lines follow, each line has a real number Y (fabs(Y) <= 1e10);
Output
For each test case, you should just output one real number(accurate up to 4 decimal places),which is the solution of the equation,or “No solution!”,if there is no solution for the equation between 0 and 100.
Sample Input
2 100 -4
Sample Output
1.6152 No solution!
这个题二分比较明显,但是二分法要注意返回的值,返回不同的值有精度问题。
#include <stdio.h>
#include <math.h>
double an(double x)
{
return 8*pow(x,4)+7*pow(x,3)+2*pow(x,2)+3*x+6;
}
double bs(double low,double high,double y)
{
double mid;
while(high-low>1e-7)
{
mid=(high+low)/2;
if(an(mid) > y) high=mid;
else low=mid;
}
return high;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
double y;
scanf("%lf",&y);
if(y<an(0)||y>an(100.0))
printf("No solution!\n");
else
printf("%.4lf\n",bs(0,100,y));
}
return 0;
}
相关文章推荐
- HOST1PLUS 的 VPS 主機-絕佳的性能和特惠的價格
- 谁的用户在世界上是  明基决心保时捷设计标准
- 工作积累(十一)——Eclipse maven package失败
- hdu5294
- Map性能测试-用16G内存在Java Map中处理30亿对象
- iOS开发 - UIViewAnimationOption
- HOST1PLUS 的 VPS 主機-絕佳的性能和特惠的價格
- 改写String类别
- 20150722 Day01课程
- 《Batch Normalization Accelerating Deep Network Training by Reducing Internal Covariate Shift》阅读笔记与实现
- 【Android】Android程序自动更新
- 捕获和冒泡
- COJ 0579 4020求次短路的长度
- android基础:broadcast广播简单实例
- Win10用户不同设备的开始菜单、应用同步将取消 减少硬盘空间的浪费
- CoreData的简单使用
- [acg]
- JDBC连接数据库
- hdu2141_Can you find it?
- iOS 开发第一步 C语言基础之递归