zoukankan      html  css  js  c++  java
  • UVA 10341 Solve It

    Problem F
    Solve It
    Input: standard input
    Output: standard output
    Time Limit: 1 second
    Memory Limit: 32 MB
    Solve the equation:
    p*e-x + q*sin(x) + r*cos(x) + s*tan(x) + t*x2 + u = 0
    where 0 <= x <= 1.
    Input
    Input consists of multiple test cases and terminated by an EOF. Each test case consists of
    6 integers in a single line: p, q, r, s, t and u (where 0 <= p,r <= 20 and -20 <=
    q,s,t <= 0). There will be maximum 2100 lines in the input file.
    Output
    For each set of input, there should be a line containing the value of x, correct upto 4
    decimal places, or the string "No solution", whichever is applicable.
    Sample Input
    0 0 0 0 -2 1
    1 0 0 0 -1 2
    1 -1 1 -1 -1 1
    Sample Output
    0.7071
    No solution
    0.7554

    首先对函数求导,发现是一个递减函数,这样就可以用二分求答案了,不过这个题精度要求好高啊,必须到10^-8次啊,一开始弄了一个10^-6,结果WA了,看来很久没有感觉有错误,就改了一下8就通过了,晕啊!

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    
    const double esp=1e-8;
    
    double p,q,r,s,t,u;
    
    double get_value(double x)
    {
        return p*exp(-x)+q*sin(x)+r*cos(x)+s*tan(x)+t*x*x+u;
    }
    
    double find(double x,double y)
    {
        while (y-x>esp)
        {
            double m=x+(y-x)/2;
            if (get_value(m)-esp>0) x=m;
            else y=m;
        }
        return x;
    }
    
    int main()
    {
        while (scanf("%lf%lf%lf%lf%lf%lf",&p,&q,&r,&s,&t,&u)!=EOF)
        {
            if (get_value(0.0)<0 || get_value(1.0)>0)
            printf("No solution
    ");
            else
            printf("%.4lf
    ",find(0.0,1.0));
        }
        return 0;
    }
    至少做到我努力了
  • 相关阅读:
    acwing2-01背包问题
    背包问题(转载)
    考研易错点 二叉树的度和图的度
    考研易错点*s++
    考研复习易错点数组指针和指针数组
    Android Crash Learning
    Mysql5.7中的分组排序
    康师傅JVM:StringTable(十三)
    RocketMQ集群搭建
    RocketMq的单机安装
  • 原文地址:https://www.cnblogs.com/chensunrise/p/3694254.html
Copyright © 2011-2022 走看看