題目連接:
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.00000001
using 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;
}