TOJ 3051


題目連接:

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;
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章