【杭电2199】Can you solve this equation?

待我称王封你为后i 2022-09-24 05:29 233阅读 0赞

这里写图片描述

这题卡精度,精确到小数点后第四位,所以while()条件用<1e-5作为限制,不能受整数二分方法的限制,重要的是二分思想,本题只要让r或l直接等于mid即可,因为浮点型除以2后不存在约数是个确定的值,不符合while()条件就跳出输出mid,简洁明了。
还有其他的二分方法,不过这个理解起来最为简单,我也是借鉴别人的代码综合而来的,却是是受益匪浅。

  1. #include<stdio.h>
  2. #include<math.h>
  3. double judge(double mid) {
  4. return 8*pow(mid,4.0)+7*pow(mid,3.0)+2*pow(mid,2.0)+3*mid+6;
  5. }
  6. int main() {
  7. int T;
  8. scanf("%d",&T);
  9. while(T--) {
  10. double y;
  11. scanf("%lf",&y);
  12. if(y<judge(0.0)||y>judge(100.0)) {
  13. printf("No solution!\n");
  14. continue;
  15. }
  16. double l=0,r=100;
  17. double mid;
  18. while(fabs(judge(mid)-y)>1e-5) {
  19. mid=(l+r)/2;
  20. if(judge(mid)>y)
  21. r=mid;
  22. else if(judge(mid)<y)
  23. l=mid;
  24. }
  25. printf("%.4lf\n",mid);
  26. }
  27. return 0;
  28. }

http://acm.hdu.edu.cn/showproblem.php?pid=2199

发表评论

表情:
评论列表 (有 0 条评论,233人围观)

还没有评论,来说两句吧...

相关阅读

    相关 2078

    说实话,此题是一道有严重bug的问题,对于xhd没晚能复习的科目数m根本就没用上!!!哎不管那么些了,反正ac了!呵呵!此题这样想xhd得复习效率是前一课程和后一课程复习效率差