作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

题目描述:

分子为1的分数称为埃及分数。现输入一个真分数(分子比分母小的分数,叫做真分数),请将该分数分解为埃及分数。如:8/11 = 1/2+1/5+1/55+1/110。

注:真分数指分子小于分母的分数,分子和分母有可能gcd不为1!

如有多个解,请输出任意一个。

请注意本题含有多组样例输入!

输入描述:

输入一个真分数,String型

输出描述:

输出分解后的string

示例:

输入:

8/11
2/4

输出:

1/2+1/5+1/55+1/110
1/3+1/6

说明:

第二个样例直接输出1/2也是可以的

解题思路:

本题有两个方法:1)取巧;2)贪心算法。

1)直接输出n个1/X即可,比如8/11就输出1/11+1/11+。。。+1/11,emm取巧。

2)贪心算法即在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解 。令真分数8/11进行拆分,先找到比其小的最大埃及分数,也就是1/2,那么8/11-1/2等于5/22,则找其最大埃及分数,即1/5,以此类推直到找完所有的埃及分数。其算法实现如下:

  1. 假设真分数为a/b,那么b除以a可以得到c,余数为d。即
  2. 两侧同除a,可以得到;
  3. 因为d是a的余数,所以d<a,那么;
  4. 两边取倒数,即,1/(c+1)就是我们要找的最大埃及分数;
  5. 令e=c+1,则有
  6. 即表示减去一个最大埃及分数后,新的a=a*e-b,新的b等于b*e;
  7. 当a等于1时说明分解到头了,此时的b就是最后一个埃及分数的分母。

测试代码:

1)取巧方法。

#include<iostream>
#include<string>using namespace std;int main() {string s;while (cin >> s) {string ans;int n;for (int i = 0; i < s.size(); i++) {if (s[i] == '/') {n = stoi(s.substr(0, i));s = "1/" + s.substr(i + 1) + "+";break;}}while (n--) {ans += s;}cout << ans.substr(0,ans.size()-1) << endl;}return 0;
}

2)贪心算法。

#include<iostream>
#include<string>using namespace std;int main() {string s;while (cin >> s) {string ans;int a,b;for (int i = 0; i < s.size(); i++) {if (s[i] == '/') {a = stoi(s.substr(0, i));b = stoi(s.substr(i + 1));break;}}while(1){int e=b/a+1;ans+="1/";ans+=to_string(e);a=a*e-b;b=b*e;ans+="+";if(a==1){ans+="1/";ans+=to_string(b);break;}else if(a>1&&b%a==0){ans+="1/";ans+=to_string(b/a);break;}}cout<<ans<<endl;}return 0;
}

华为机试HJ82:将真分数分解为埃及分数相关推荐

  1. 将真分数分解为埃及分数(斐波那契算法步骤)Java

    package com.patience.interview.huawei;import java.util.Scanner;/*** 将真分数分解为埃及分数* @author Green.Gee* ...

  2. python埃及分数_C语言将真分数分解为埃及分数代码解析

    问题描述 现输入一个真分数,请将该分数分解为埃及分数. 问题分析 真分数:分子比分母小的分数,叫做真分数.真分数的分数值小于1.如1/2,3/5,8/9等. 分子是1的分数,叫单位分数.古代埃及人在进 ...

  3. 华为OJ平台——将真分数分解为埃及分数

    题目描述: 分子为1的分数称为埃及分数.现输入一个真分数(分子比分母小的分数,叫做真分数),请将该分数分解为埃及分数.如:8/11 = 1/2+1/5+1/55+1/110. 输入: 输入一个真分数, ...

  4. Java算法:华为机试算法(下),华为算法Java版,牛客网华为算法73~108题

    接上篇:Java算法:华为机试算法(中),华为算法Java版,牛客网华为算法55~72题   HJ73 计算日期到天数转换 计算日期到天数转换 题目描述 根据输入的日期,计算是这一年的第几天.. 测试 ...

  5. 牛客在线编程-华为机试-中等

    牛客在线编程题目-华为机试-中等 题号 题目 知识点 难度 通过率 HJ16 购物单 动态规划 中等 21.21% HJ17 坐标移动 字符串 中等 24.79% HJ20 密码验证合格程序 数组 字 ...

  6. 华为机试108题(C 语言解答)

    Nowcoder题库链接:华为机试 HJ1 字符串最后一个单词的长度(字符串) 输入:hello nowcoder输出:8说明: 最后一个单词为nowcoder,长度为8 示例代码: HJ1.c #i ...

  7. 【HUAWEI】华为机试试题-105

    LeeCode试题链接直接上 HJ1 字符串最后一个单词的长度 HJ2 计算某字符出现次数 HJ3 明明的随机数:随机数去重排序输出(小-大) HJ4 字符串分隔:输入一个字符串,请按长度为8拆分每个 ...

  8. 【强烈推荐收藏】坚持3个月爆肝华为机试108题C++全解(适合新手入门,就业必刷套题)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 前言 金九银十,金三银四.当前正处于校招.社招的火热期,之前就想为正在筹备就业的同学们准备刷题宝 ...

  9. 华为机试python需要需要当时编译通过吗_华为校招软开算法岗历年机试编程题77道C++代码详解(五)...

    温馨提示:考虑到华为每年校招机试在牛客网进行,所以本文以及同系列其他八篇文章的所有代码均仅保证在牛客网华为机试页面100%accepted.其他编译器使用本代码可能会出现不通过的情况,请知晓. 41. ...

最新文章

  1. 增大iphone音量技巧_原来苹果手机隐藏功能这么好用!调整这个设置,一键增大外放音量...
  2. 免费下载 | 超级APP背后的移动端技术大揭秘
  3. iOS appstore各种图片的尺寸和需要注意的地方
  4. 十、CSS三行代码实现 溢出的文字省略号显示(white-space: nowrap;overflow: hidden;text-overflow: ellipsis;)
  5. Vue中使用echarts图表插件
  6. Java中length、length()、size()的区别
  7. edid ddc 显示器识别
  8. photoshop抠图怀恋抽出滤镜
  9. Matlab机器学习和深度学习APP之Regression Learner
  10. 二级c语言不写编程,计算机二级C语言 到底是不是考原题
  11. Recyclerview 特别好用的局部刷新item方法
  12. spark mlib系列2
  13. 域名解析地址如何查看?为什么要做域名解析?
  14. java基础篇(10) 可变参数列表介绍
  15. 第一节计算机课要教什么作用,信息技术第一节课要求
  16. 使用vscode编写小程序并同步
  17. PRML 2.1 二元变量
  18. 初级摄影全程训练教程
  19. threejs 物体根据相机位置显示_threejs
  20. iPhone 4s iOS 9.3.5 环境安装微信

热门文章

  1. 渐变虚框及边框滚动的实现
  2. 现任明教教主CCNP Security SecureV1.0 第一天.2
  3. LVS-DR负载均衡-02
  4. shell if condition
  5. [Android]PhoneGap源码分析——白名单
  6. LRGB一个带亮度值的颜色
  7. 让你的网站首页自动选择语言转跳
  8. STL源码剖析-map
  9. python comprehension_Python从题目中学习:List comprehension
  10. 【论文写作】城市酒店入住信息管理系统中客房各项功能如何写