您的位置:首页 > 其它

POJ 3175--条件枚举

2016-07-29 11:15 260 查看
题意:

给出一个数 n,之后给出n个数,表示小数的位数,求那个数开方后的小数位数是这n个数,求出满足这样条件的最小数。

输入:

3
123

输出:

17


分析:

如果 x.123... 这个数字的平方是一个整数的话,那必然

sqr(x.124) > ceil(sqr(x.123)) [sqr = 求平方, ceil = 向上取整]

所以,就可以从小到大枚举它的整数部分 x ,遇到第一个满足结果的 x,就是答案了。

代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;

long long l,n;
double a[]={1,1e-1,1e-2,1e-3,1e-4,1e-5,1e-6,1e-7,1e-8,1e-9};
int main()
{
scanf("%I64d%I64d",&l,&n);
double x=n*a[l];
for(long long i=1;;i++)
{
double p=x+i;
double c=(p+a[l])*(p+a[l]);
double b=(long long)(p*p)+1;
if(c>b)
{
printf("%I64d\n",(long long)b);
break;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: