搜索算法 problem(1001)

来源:互联网 发布:java项目加密 编辑:程序博客网 时间:2024/06/06 05:20

1.简明题意

这个题的意思就是输入一个y求8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y在0~100之间的解

2.解题思路

利用二分方法求出这个方程的极值点,然后带入原方程就可以

3.感想

求一个方程利用程序就可以求出来解,不论方程多复杂

4.AC代码

#include<iostream>#include<math.h>#include<iomanip>using namespace std;const double eps = 1e-10;double y;double yuanfx(double x){    return 8 * pow(x, 4) + 7 * pow(x, 3) + 2 * pow(x, 2) + 3 * x + 6-y;}double daofx(double x){    return 32 * pow(x, 3) + 21 * pow(x, 2) + 4 * x+3;}double qiujie(){    double mid, right, left;    left = 0; right = 100;    while (left + eps < right)    {        mid = (left + right) / 2;        while (fabs(yuanfx(mid))>1e-5)        {            if (yuanfx(mid) > 0)            {                right = mid - 1;            }            else {                left = mid + 1;            }            mid = (left + right) / 2;        }    }    return mid;}//double solve()//{//    double mmid, right, left;//    left = 0;//    right = 100;//    while (left + eps < right)//    {//        mmid = (left + right) / 2;//        if (y - daofx(mmid) < eps)//        {//            right = mmid;//        }//        else//        {//            left = mmid;//        }//    }//    return mmid;//}int main(){    double qiujie();    /*double solve();*/    double yuanfx(double x);    int a;    /*double mid, result;*/    cin >> a;    for (int i = 0; i < a; i++)    {        cin >> y;    /*    mid=solve();        result = yuanfx(mid);*/        if (yuanfx(0)>0||yuanfx(100)<0)        {            cout << "No solution!" << endl;         }        else {                cout << setiosflags(ios::fixed) << setprecision(4) << qiujie() << endl;        }    }    return 0;}


0 0
原创粉丝点击