HDU 2199 Can you solve this equation? && NYOJ 503 解方程

举报
Linux猿 发表于 2021/08/05 00:45:33 2021/08/05
【摘要】 题目链接~~> 做题感悟:这个题太坑(也许暗示着对二分还没掌握好),调精度调了半上午才调出来。 解题思路:在[ 0 , 100 ] 这个区间里函数是单调递增的所以与二分有一点的差别(个人感觉),只要在 F( 0 ) ~ F( 100 ) 之间的值都有解不断二分即可,也不用加 0.000001 ,其实加也可以. 总结一下 pow ( x , y ) : &...

题目链接~~>

做题感悟:这个题太坑(也许暗示着对二分还没掌握好),调精度调了半上午才调出来。

解题思路:在[ 0 , 100 ] 这个区间里函数是单调递增的所以与二分有一点的差别(个人感觉),只要在 F( 0 ) ~ F( 100 ) 之间的值都有解不断二分即可,也不用加 0.000001 ,其实加也可以.

总结一下 pow ( x , y ) :  

                 头文件:math.h/cmath(C++)

                 功能:计算x的y次 。 x 和 y 均为 double 类型,返回值也是 double .

                返回值:( 1 ) x不能为负数且y为小数,( 2 ) x为0且y小于等于0,这两种情况都不行。返回幂指数的结果。

                返回类型:double型,int,float会给与警告!

代码(HDU):


  
  1. #include<stdio.h>
  2. #include<math.h>
  3. double n ;
  4. double find(double x)
  5. {
  6. return 8.0*pow(x,4)+7.0*pow(x,3)+2.0*pow(x,2)+3*x+6.0 ;
  7. }
  8. double binary_search(double x,double y)
  9. {
  10. double mx,mid ;
  11. while(x<=y)
  12. {
  13. mid=x+(y-x)/2.0 ;
  14. mx=find(mid) ;
  15. if(fabs(mx-n)<=0.0001) // 每次二分控制好精度
  16. return mid ;
  17. else
  18. mx > n ? y=mid : x=mid ; // 此处不用 + 0.00001 或 - 0.00001,虽然那样也对
  19. }
  20. return -1 ;
  21. }
  22. int main()
  23. {
  24. int T ;
  25. scanf("%d",&T) ;
  26. while(T--)
  27. {
  28. scanf("%lf",&n) ;
  29. if(find(0)>n||find(100)<n)
  30. printf("No solution!\n") ;
  31. else
  32. printf("%.4lf\n", binary_search(0,100)) ;
  33. }
  34. return 0 ;
  35. }

刚开始的代码~~>

文章来源: blog.csdn.net,作者:Linux猿,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/nyist_zxp/article/details/17511569

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。