华为OJ——将真分数分解为埃及分数
题目描述
分子为1的分数称为埃及分数。现输入一个真分数(分子比分母小的分数,叫做真分数),请将该分数分解为埃及分数。如:8/11 = 1/2+1/5+1/55+1/110。
接口说明
/*
功能: 将分数分解为埃及分数序列
输入参数:
String pcRealFraction:真分数(格式“8/11”)
返回值:
String pcEgpytFraction:分解后的埃及分数序列(格式“1/2+1/5+1/55+1/100”)
*/
public static String ConvertRealFractToEgpytFract(String pcRealFraction)
{
return null;
}输入描述:
输入一个真分数,String型输出描述:
输出分解后的string示例1
输入
8/11
输出
1/2+1/5+1/55+1/110
实现代码
思路
①对于分数a/b,则分解为1/c+m,其中c=b/a+1,(有点类似强行找真分子的味道),然后m=a/b-1/c,
为了循环m为新的一个a/b,根据纯粹的数学计算得出a=a * c - b , b = c * b;当a循环遍历后为1时,即跳出循环
②而对于if (b % (a - 1) == 0) 这种情况,方便快速得出结果,类似3/110,此时b=110,a=3,具体见代码注释
package cn.c_shuang.demo79;import java.util.Scanner;
/*** 将真分数分解为埃及分数* @author Cshuang**/
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);while(in.hasNext()){String s=in.next();egyptAnalyse(s);}in.close();}private static void egyptAnalyse(String s) {String[] parts=s.split("/");int a=Integer.parseInt(parts[0]);//分子int b=Integer.parseInt(parts[1]);//分母StringBuilder sb=new StringBuilder();int c;while (a != 1) {//类似3/110的情况,这里加着方便快速得出结果//虽然没有这个if条件判断,也能得出,但是会慢很多,而且埃及分解结果不唯一,加了该判断结果会更快if (b % (a - 1) == 0) {sb.append("1/").append(b / (a - 1)).append('+');a = 1;} else {c = b / a + 1; //重要点sb.append("1/").append(c).append('+');a = a * c - b; // a/b-1/c=(a*c-b)/(b*c),所以分子a = a * c - b;b = c * b; // 分母b = c * b; if (b % a == 0) {b = b / a;a = 1;//直接跳出循环}}}sb.append("1/").append(b);System.out.println(sb.toString());}
}
华为OJ——将真分数分解为埃及分数相关推荐
- 将真分数分解为埃及分数(斐波那契算法步骤)Java
package com.patience.interview.huawei;import java.util.Scanner;/*** 将真分数分解为埃及分数* @author Green.Gee* ...
- python埃及分数_C语言将真分数分解为埃及分数代码解析
问题描述 现输入一个真分数,请将该分数分解为埃及分数. 问题分析 真分数:分子比分母小的分数,叫做真分数.真分数的分数值小于1.如1/2,3/5,8/9等. 分子是1的分数,叫单位分数.古代埃及人在进 ...
- 华为OJ平台——将真分数分解为埃及分数
题目描述: 分子为1的分数称为埃及分数.现输入一个真分数(分子比分母小的分数,叫做真分数),请将该分数分解为埃及分数.如:8/11 = 1/2+1/5+1/55+1/110. 输入: 输入一个真分数, ...
- 华为机试HJ82:将真分数分解为埃及分数
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 分子为1的分数称为埃及分数.现输入一个真分数(分子比分母小的分数,叫做真分数),请将 ...
- C语言——贪心算法。设计一个算法,把一个真分数表示为埃及分数之和的形式。所谓埃及分数是指分子为1的分数。例如3/5=1/2+1/10
解题思路: 最先想到的是把原数对自己的最大埃及数做减法,直到减完为止. 1. 找最大埃及分数 要找出b/a的最大埃及数(a>b).利用倒数即可推出最大埃及数 a/b = d-k(余数) a=d ...
- 埃及分数怎么计算java_贪心算法之埃及分数问题(附c++源代码)
感谢博主提供算法思路http://blog.csdn.net/tterminator/article/details/50927393 博主的是java代码,在这里写个c++代码,只是牛客网中有些很无 ...
- python埃及分数_趣学Python算法100例
算法源于生活,又可以改变生活.本书专为Python初学者量身打造,内容涵盖Python编程的基础知识和常用算法,是初学算法设计与实现的不错选择. 本书从一些经典算法出发,介绍了100个趣味编程实例.这 ...
- 埃及分数问题c语言,贪心算法之埃及分数问题(附c++源代码)
感谢博主提供算法思路http://blog.csdn.net/tterminator/article/details/50927393 博主的是java代码,在这里写个c++代码,只是牛客网中有些很无 ...
- 真分数转埃及分数的和 (贪心)
分子为1的分数称为埃及分数.现输入一个真分数(分子比分母小的分数,叫做真分数),请将该分数分解为埃及分数. 例如6/7 = 1/2+1/3+1/42 题目分析:设原分数为a/b,b除a得到c,c+1作 ...
- 贪心算法之埃及分数问题
1.问题:给定一个分数,如7/8,我们可以把它表示为1/2 + 1/3 +1/24,埃及分数问题即把一个真分数表示为最少的埃及分数之和的形式,输入一个真分数把其分解为埃及分数之和. 2.设计思路:设分 ...
最新文章
- System.getProperty()参数大全
- java与众包的联系_众包、众筹和众创是什么 三者区别与联系
- [连载]《C#通讯(串口和网络)框架的设计与实现》- 13.中英文版本切换设计
- mysql 查询列表是否关注_点赞功能,用mysql还是redis?
- 情侣签到365天获1000现金?这款App被关停下架了 网友拍手称快!
- 如何c语言读取文件中的内容,急急急!!!如何读取文件中的相关内容
- (SWAT-3)SWAT土壤数据库的建立
- Mosquitto源码学习
- 教育培训机构管理系统软件如何查看优惠券记录?
- PySpark 之 连接变换 union、intersection、subtract、cartesian
- 七夕表白攻略:教你用自己的专业说情话,成功率100%,我只能帮你们到这里了啊~(程序员系列)
- 1913. 公平摄影
- 计算机历史博物馆观后感:阿达·洛芙莱斯生平1
- 高程、方位角、图幅编号
- 通过JAVA自动获取Ip地址
- 学生教育云平台登录入口_甘肃省教育云平台
- 最新Crack:foxit pdf sdk 8.4.1_win_java
- 串口服务器(MOXA)配置
- iqooneo3 如何不用vivo账号下载外部应用_【@海林市民】海林人自己的APP上线运行啦,海林融媒APP如何下载安装?安装指南在这里!...
- 考研数学二真题1987年-2022年所有历年真题及详解(高清无水印)