POJ 3175--条件枚举
2016-07-29 11:15
260 查看
题意:
给出一个数 n,之后给出n个数,表示小数的位数,求那个数开方后的小数位数是这n个数,求出满足这样条件的最小数。
输入:
输出:
分析:
如果 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;
}
给出一个数 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;
}
相关文章推荐
- ETL中的数据增量抽取机制
- mysql主从
- Ajax入门(与Java服务器交互)(三)——解析XML数据、使用级联下拉选择框
- Android 蓝牙通信及自定义消息协议的解析和生成
- java 包之 BeanUtils包的使用
- C#------对SQLServer进行简单的增,删,改,查
- 数据结构——B树、B+树
- CentOS设置永久静态路由
- C#Winform程序如何发布并自动升级(图解)
- 友盟QQ获得用户信息
- 设计模式之单例模式
- 打造高质量Android代码系列之避免重复代码
- JavaCore/HeapDump文件及其分析方法
- WKWebView的使用详解
- java导出和导入csv文件工具类
- hdu 1025 && hdu 1058
- Ajax入门(二)——乱码问题的解决
- 图论 匈牙利最大匹配
- Java--StringBuilder equals
- vim如何添加或删除多行注释