TOJ 3051

来源:互联网 发布:喵姐捏脸数据 编辑:程序博客网 时间:2024/05/02 09:48


题目连接:

http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=3051


题目分类:

数学题 - 公式化简求值


数据结构:


思想分析:

x^y - y^x -> x^(1/x) = y^(1/y)

数学问题,

化简,求它的递增递减区间

----------------------------------------------------------------------------


得知在x=e的时候,达到极值点, 

当x无线趋向于+∞的时候,函数无限接近于1.

所以要使函数有x,x1使得y(x)=y(x1), 就必须 x>1 且 x≠e

题目描述x是比较小的数,

所以只用在1.1到e开区间区即可

一旦确定区间,

要找到一个元素 使得y(a)=y(x)

则用二分查找法.

使double的精度达到5以上

即可满足要求


证明:


源代码:

#include <iostream>#include <stdio.h>#include <math.h>#define E 2.7182818284#define precision 0.00000001using namespace std;double _getans( double a, double b, double gold ){double head = a, tail = b,    middle = ( head + tail ) / 2.0, tmp;   while( tail >= head ){middle = ( head + tail ) / 2.0;tmp = log( middle ) / middle; ///pow(middle,1.0/middle);if( gold > tmp ){tail = middle - precision;}else{head = middle + precision;}}return head;}int main(){double n,tmp;while( scanf( "%lf", &n ) != EOF ){if( n < E ){printf( "%.5lf\n", _getans( E, 100.0, log( n ) / n ) );}else{printf( "-1\n" );}}return 0;}




0 0
原创粉丝点击