XTU1236 Fraction
2016-04-07 19:38
369 查看
Fraction | ||
Accepted : 124 | Submit : 806 | |
Time Limit : 1000 MS | Memory Limit : 65536 KB |
FractionProblem Description:Everyone has silly periods, especially for RenShengGe. It's a sunny day, no one knows what happened to RenShengGe, RenShengGe says that he wants to change all decimal fractions between 0 and 1 to fraction. In addtion, he saysdecimal fractions are too complicate, and set that is much more convient than 0.33333... as an example to support his theory. So, RenShengGe lists a lot of numbers in textbooks and starts his great work. To his dissapoint, he soon realizes that the denominator of the fraction may be very big which kills the simplicity that support of his theory. But RenShengGe is famous for his persistence, so he decided to sacrifice some accuracy of fractions. Ok, In his new solution, he confines the denominator in [1,1000] and figure out the least absolute different fractions with the decimal fraction under his restriction. If several fractions satifies the restriction, he chooses the smallest one with simplest formation. InputThe first line contains a number T(no more than 10000) which represents the number of test cases.And there followed T lines, each line contains a finite decimal fraction x that satisfies . OutputFor each test case, transform x in RenShengGe's rule.Sample Input30.9999999999999 0.3333333333333 0.2222222222222 Sample Output1/11/3 2/9 tipYou can use double to save x;SourceXTU OnlineJudge |
分析:枚举分母,每次得到的分子与初始值相比较误差最小的就是答案。
<span style="font-size:18px;">#include <iostream> #include <cstdio> #include <cstring> #include <stack> #include <queue> #include <map> #include <set> #include <vector> #include <cmath> #include <algorithm> using namespace std; const double eps = 1e-6; const double pi = acos(-1.0); const int INF = 0x3f3f3f3f; const int MOD = 1000000007; #define ll long long #define CL(a,b) memset(a,b,sizeof(a)) #define lson (i<<1) #define rson ((i<<1)|1) #define MAXN 100010 int main() { int T; double s,minx; scanf("%d",&T); while(T--) { scanf("%lf",&s); minx = s; int a=0,b=1; for(int i=1; i<=1000; i++) { int j = i*s+0.5; double f = j*1.0/i; double p = fabs(f-s); if(minx > p) { minx = p; a = j; b = i; } } int r = __gcd(a, b); printf("%d/%d\n",a/r,b/r); } return 0; } </span>
相关文章推荐
- linux学习笔记(二)
- 价值观
- 巡回赛 -- 简单的拓扑排序
- 剑指offter-面试题7.用两个栈实现队列
- 一维搜索算法基本原理、典型算法初步
- 【数据结构与算法】LCA
- Xml解析
- MongoDB搭建副本集(二)
- 国内最新安卓渠道列表42个(转)
- Cocos2d-x多语言支持解决方式
- ssh 免密码登录
- "Linux内核分析"第七周
- Android中的回调
- JUC 常用类
- 判断两个字符串是否为旋转词
- Android滑动菜单框架完全解析,教你如何一分钟实现滑动菜单特效
- java操作redis基本功能_Main方法(六)
- 自我提升
- package.json for NPM 文件详解
- C语言问卷调查