首页 > 试题广场 >

将真分数分解为埃及分数

[编程题]将真分数分解为埃及分数
  • 热度指数:77919 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
分子为1的分数称为埃及分数。现输入一个真分数(分子比分母小的分数,叫做真分数),请将该分数分解为不同的埃及分数。如:8/11 = 1/2+1/5+1/55+1/110。
注:真分数指分子小于分母的分数,分子和分母有可能gcd不为1!
如有多个解,请输出任意一个。




输入描述:

输入一个真分数,String型



输出描述:

输出分解后的string

示例1

输入

8/11
2/4

输出

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

说明

第二个样例直接输出1/2也是可以的    
头像 牛客271438号
发表于 2021-10-21 15:29:53
#include<iostream> #include<string> #include<algorithm> using namespace std; int main() { string s; while(cin>>s) 展开全文
头像 xiaoqiangqiang
发表于 2020-06-29 22:48:29
参考链接https://blog.csdn.net/zyz_bz/article/details/89515096这是我看到最好的解释了 公式原理 a,b互质,其中a<b,则可以进行如此的拆分 ;则 算法描述 设某个真分数的分子为a,分母为b; 把b除以a的商p部分加1后的值作为埃 展开全文
头像 牛客893445002号
发表于 2022-04-02 21:49:26
import java.util.Scanner; /**  * @author xuxiang  * @date 2022/4/2 21:33  */ /**  * 将真分数分解为埃及分数  */ public class Main { &nbs 展开全文
头像 可导必连续^-^
发表于 2022-02-13 04:27:39
while True: try: a,b = map(int,input().split('/')) a = a * 10 b = b * 10 res = [] while a: for 展开全文
头像 aze5888
发表于 2022-04-17 12:13:31
此题分无脑解法和正统解法两种,分别来介绍一下吧。 假设:a是分子,b是分母。 一、无脑解法: 这个解法有点耍流氓,并没有真正意义上锻炼到思维,但还是说一下。 不管给什么分数,也不管能不能整除,直接把原数分解成a个1/b就行了。所以核心代码就2行。 也就是说第一个例子8/11,就被硬生生的分成8个1/ 展开全文
头像 牛客693600570号
发表于 2021-12-30 08:36:09
#解题思路:将真分数(a/b)拆分成a*(1/b),也就是a个1/b,然后我们从大到小依次找出a中能被B整除的数. 比如: 5/8 这个真分数首先我们看,5不能被8整除,但是4可以,那从5中把4分离出来,变成1+4,剩余的1不能拆分,那埃及分数就是1/8+1/2 再比如:7/8这个真分数,首先我们 展开全文
头像 冷酷的杀猪匠
发表于 2022-03-07 22:35:18
#include<stdio.h> int main(){ int a, b; while(scanf("%d/%d", &a, &b) != EOF){ for(int i=0; i<a-1; i++){ printf("1/%d+", b 展开全文
头像 我心态贼好
发表于 2020-07-28 08:48:22
/** 数学家斐波那契提出的一种求解***分数的贪心算法,准确的算法表述应该是这样的: 设某个真分数的分子为a,分母为b; 把c=(b/a+1)作为分解式中第一个***分数的分母; 将a-b%a作为新的a; 将b*c作为新的b; 如果a等于1,则最后一个***分数为1/b,算法结束; 如果a大于1但 展开全文
头像 摸鱼学大师
发表于 2021-10-31 09:59:06
题目的主要信息: 分子为1的分数称为埃及分数 输入一个分子比分母小的分数,请分解为分母不同的埃及分数 分子和分母有可能gcd不为1 如有多个解,输出一个即可 方法一:迭代 具体做法: 如下图公式推算,我们可以贪心地用这种除法取余地方式更新分子分母,不断获取分子为1的分数。 因为分子分母gcd可 展开全文
头像 qinzhiwei
发表于 2021-10-04 21:33:39
import java.util.Scanner; /**  * 先将 a/b 转换成 1/x+y/z 的形式  * y/z 使用递归继续分解,直到分子为1  *    展开全文