- 论坛徽章:
- 0
|
苛刻的算法,只告诉你是否大于,让你求出具体值
有点趣味, 用Dev-C写写看.
#include <iostream.h>;
#include <time.h>;
double generate_unknown()
{
double result;
srand(time(0));
result = rand()/100.0; // range : 0.00 to 327.67
if (rand()%2) result = -result;
return result; // range : -327.67 to 327.67
}
double find_upper(double unknown)
{
double result=1;
while (unknown>;result) result*=2;
return result;
}
double find_lower(double unknown, double result)
{
while (!(unknown>;result)) result/=2;
return result;
}
double run(double unknown)
{
double mid, upper, lower;
upper = find_upper(unknown);
cout<<"upper = "<<upper<<endl;
lower = find_lower(unknown,upper);
cout<<"lower = "<<lower<<endl;
while (upper-lower>;0.0001) {
mid=(upper+lower)/2;
if (unknown>;mid) lower=mid;
else upper=mid;
cout<<mid<<endl;
}
return mid;
}
int main()
{
double unknown;
unknown = generate_unknown();
cout<<"Unknown value is : "<<unknown<<endl;
if (unknown>;0) cout<<unknown<<' '<<run(unknown)<<endl;
else cout<<unknown<<' '<<-run(-unknown)<<endl;
system(" AUSE" ;
exit(0);
} |
|