博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA代码—算法基础:埃及分数问题
阅读量:4041 次
发布时间:2019-05-24

本文共 1952 字,大约阅读时间需要 6 分钟。

埃及分数问题

问题描述

分子为1 的分数称为埃及分数,现输入一个真分数,请将该分数按下面的方法分解为埃及分数: 1.若真分数的分子a能整除分母b,则真分数经过化简就可以得到埃及分数; 2.若真分数的分子不能整除分母,则可以从原来的分数中分解出一个分母为b/a+1的埃及分数; 3.用这种方法将剩余部分反复分解,最后可得到结果。如:8/11=1/2 + 1/5 + 1/37 + 1/4070。

输入样例:

一个分数如A/B的形式,例如:3/88

输出样例:

1/30 + 1/1320

问题分析

比如,2/15 一共有 4 种不同的分解法(姑且称为埃及分解法):

1/8 + 1/120

1/9 + 1/45
1/10 + 1/30
1/12 + 1/20

由于埃及分数都是以1为分子的,因此,假设最初的分数为A/B,那么如果A能够整除B,则埃及数为1/(B/A)

如果不能够整除时,能够从其中分离出来的最大的分子为1的分数就是1/((A/B)+1)
以2/7为例,能够从中分离出来的最大的分子为1的数是1/(7/2+1) = 1/4
分离出此数之后,再计算出剩下的余数,重复进行以上的判断即可

算法设计

  1. 要求用户输入分子a,分母b
  2. 判断a是否能够整除b
    是: 将a置为1,b置为b/a
  3. 判断a是否为1

    是:
    直接输出a/b, 退出循环
    否:
    得到小于它的最大的埃及分数的分母 C = A / B + 1

    得到余数的分子:  A*C-B        得到余数的分母:  B*C
  4. 返回2继续循环

    [运行结果]

    请输入一个分数的分子
    2
    请输入一个分数的分母
    45
    2/45=1/23+1/1035
    可分解为埃及数的个数为: 2

算法实现

/*     * numerator 代表分子     * denominator 代表分母     *      *      * 例如: numerator = 2 ; denominator =4      * 2/4  进行约分     * 2/5  进行计算     *      * */    public static void egyptFraction(int numerator, int denominator) {        int total=0; //计数器        System.out.print(numerator + "/" + denominator + "=");        while(true) {            /* 如果分子能够整除分母,则对原分数进行约分 , 保持分子为1 */            if (denominator % numerator == 0) {                denominator = denominator / numerator;                numerator = 1;            }            /* 分子为1时,直接输出结果,中止循环 */            if (numerator == 1) {                System.out.print(numerator + "/" + denominator);                total++;                break;            } else {                /* 保留原有的分子与分母的值 */                int d = denominator;                int n = numerator;                /* 得到比当前分数小的最大埃及分数的分母,并输出找到的最大埃及数 */                int num = denominator / numerator + 1;                System.out.print(1 + "/" + num + "+");                total++;                /* 得到余数的分子与分母,继续循环 */                denominator = d * num;                numerator = n * num - d;            }        }        System.out.println();        System.out.println("可分解为埃及数的个数为: " + total);    }

(完)

转载地址:http://egvdi.baihongyu.com/

你可能感兴趣的文章
JavaScript的一些基础-数据类型
查看>>
JavaScript基础知识(2)
查看>>
转载一个webview开车指南以及实际项目中的使用
查看>>
android中对于非属性动画的整理
查看>>
一个简单的TabLayout的使用
查看>>
ReactNative使用Redux例子
查看>>
Promise的基本使用
查看>>
coursesa课程 Python 3 programming 统计文件有多少单词
查看>>
coursesa课程 Python 3 programming 输出每一行句子的第三个单词
查看>>
Returning a value from a function
查看>>
coursesa课程 Python 3 programming Functions can call other functions 函数调用另一个函数
查看>>
coursesa课程 Python 3 programming The while Statement
查看>>
course_2_assessment_6
查看>>
coursesa课程 Python 3 programming course_2_assessment_7 多参数函数练习题
查看>>
coursesa课程 Python 3 programming course_2_assessment_8 sorted练习题
查看>>
在unity中建立最小的shader(Minimal Shader)
查看>>
1.3 Debugging of Shaders (调试着色器)
查看>>
关于phpcms中模块_tag.class.php中的pc_tag()方法的含义
查看>>
vsftp 配置具有匿名登录也有系统用户登录,系统用户有管理权限,匿名只有下载权限。
查看>>
linux安装usb wifi接收器
查看>>