HDU1160 Cantor
来源:互联网 发布:资源数据库微博 编辑:程序博客网 时间:2024/05/16 15:40
HDU1160 Cantor
题目链接:
题意:给一个数,范围是0到1,包括两个端点。判断他的三进制表示中是否含有1。输入”END”则本题结束。
思路:初想此题,简直蛋疼。什么JB玩意?!后面看着题解,突然脑子迸出这样一个方程
,然后两边等式同时乘以3。因为所有的a只能取0,1,2三个值,所以乘以三后,n的整数部分即为a1,这就解决了如何求系数的问题。
剩下的问题是,如何判断循环小数?题解给出了这样的答案:如果当前数字与最开始数字的差小于eps(自己定义,根据题目为1e-7),则循环过。事实上有的小数是到一定位数以后才开始循环的,所以这个地方还有些问题,不过题目已经AC。
本次还学到了sscanf函数,不由得说收获多多。
源码:
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
double eps = 1e-7;
bool cal(double n)
{
if(1-n<eps) return true;
int inter;
double now,org=n;
while(1){
inter = n*3;
if(inter==1) return false;
n = n*3 - inter;
if(fabs(org-n)<eps) break;
}
return true;
}
int main()
{
double n;
char temp[10];
while(scanf("%s",temp)!=EOF && temp[0]!='E'){
sscanf(temp,"%lf",&n);
if(cal(n)) puts("MEMBER");
else puts("NON-MEMBER");
}
return 0;
}
- HDU1160 Cantor
- hdu1160
- hdu1160
- cantor
- hdu1160&&1087
- HDU1160(LIS)
- hdu1160 LIS
- cantor 数表
- Cantor数表
- Cantor数表
- Cantor表
- Cantor展开式
- Cantor表
- Cantor表
- cantor表
- acm-Cantor
- Cantor表
- cantor数表
- 习题3—10
- JAVASE_网络编程上
- android.content.Context 含义及使用
- 个人简历
- Step-By-Step Plan For A Career Change
- HDU1160 Cantor
- 登录超时
- 字符串分割
- zoj 2112 Dynamic Rankings/树套树
- JAVA 第四次实验
- 算法效率分析框架
- 动态规划~概念理解
- AngularJs与Java Web服务器交互
- LVM学习