zoukankan      html  css  js  c++  java
  • *循环-08. 二分法求多项式单根*

    
    
     1 /*
     2  * Main.c
     3  * C8-循环-08. 二分法求多项式单根
     4  *  Created on: 2014年7月26日
     5  *      Author: Boomkeeper
     6  *****部分通过********
     7  */
     8 #include <stdio.h>
     9 #include <math.h>
    10 
    11 float a3 = 0, a2 = 0, a1 = 0, a0 = 0;
    12 
    13 double func(double x) {
    14     return (a3 * pow(x, 3) + a2 * pow(x, 2) + a1 * x + a0);
    15 }
    16 
    17 
    18 int main(void) {
    19     float a = 0, b = 0; //区间
    20     float midvalue = 0; //midvalue=(a+b)/2
    21     float threshold = 0;
    22 
    23     scanf("%f%f%f%f%f%f", &a3, &a2, &a1, &a0, &a, &b);
    24 
    25     do {
    26         midvalue = (a + b) / 2; //计算中间值
    27         if (func(a) * func(b) < 0) {
    28             if (func(midvalue) == 0) {
    29                 printf("%.2f
    ", midvalue);
    30                 return 0;
    31             } else {
    32                 if (func(midvalue) * func(a) > 0) {
    33                     //同号,说明偏左了,应当往右偏
    34                     a = midvalue;
    35                     threshold = fabs(a - b); //计算区间阀值
    36                     continue;
    37                 }
    38                 if (func(midvalue) * func(b) > 0) {
    39                     //同号,说明偏右了,应当往左偏
    40                     b = midvalue;
    41                     threshold = fabs(a - b); //计算区间阀值
    42                     continue;
    43                 }
    44             }
    45         }
    46     } while (threshold > 0.0001);
    47     /**
    48      * 因为threshold小到一定程度后,说明a、b可以看做成一点,也就是题目中f(r)=0的r点。
    49      */
    50     printf("%.2f
    ",(a+b)/2);
    51 
    52     return 0;
    53 }

    有更好方法的大虾们,希望指点,我试过将 1 while (threshold > 0.0001); 提高精度,测试结果仍然一样,我想还是算法上可能还有问题。

    题目链接:

    http://pat.zju.edu.cn/contests/basic-programming/%E5%BE%AA%E7%8E%AF-08

  • 相关阅读:
    XJOI网上同步训练DAY2 T2
    XJOI网上同步训练DAY2 T1
    BZOJ 2661 连连看
    HDU 4411 Arrest
    BZOJ 2324 营救皮卡丘
    BZOJ 1927 星际竞速
    BZOJ 3550 Vacation
    XJOI网上同步训练DAY1 T3
    php 类的相互访问
    ThinkPhp5.0_文件上传
  • 原文地址:https://www.cnblogs.com/boomkeeper/p/C8.html
Copyright © 2011-2022 走看看