您的位置:首页 > 编程语言 > Java开发

[蓝桥杯][java]埃及分数解法

2014-11-30 23:08 253 查看
import java.util.Scanner;

/*

*

标题:埃及分数

古埃及曾经创造出灿烂的人类文明,他们的分数表示却很令人不解。古埃及喜欢把一个分数分解为类似: 1/a + 1/b 的格式。

这里,a 和 b 必须是不同的两个整数,分子必须为 1

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

1/8 + 1/120

1/9 + 1/45

1/10 + 1/30

1/12 + 1/20

那么, 2/45 一共有多少个不同的埃及分解呢(满足加法交换律的算同种分解)? 请直接提交该整数(千万不要提交详细的分解式!)。

[思路]

由于埃及分数都是以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

* */

public class EmptyNumber {

public static void main(String[] args) {

/*读入用户输入的分子与分母*/

System.out.println("请输入一个分数的分子");

Scanner scanner = new Scanner(System.in);

int fenZi = scanner.nextInt();

System.out.println("请输入一个分数的分母");

scanner = new Scanner(System.in);

int fenMu = scanner.nextInt();

/*设置埃及数的计数器*/

int total = 0;

System.out.print(fenZi+"/"+fenMu+"=");

while(true){

/*如果分子能够整除分母,则对原分数进行约分 , 保持分子为1*/

if(fenMu%fenZi==0)

{ fenMu = fenMu / fenZi;fenZi = 1;}

/*分子为1时,直接输出结果,中止循环*/

if(fenZi==1)

{

System.out.print(fenZi+"/"+fenMu);

total++;

break;

}

else

{

/*保留原有的分子与分母的值*/

int m = fenMu;

int z = fenZi;

/*得到比当前分数小的最大埃及分数的分母,并输出找到的最大埃及数*/

int num = fenMu / fenZi + 1;

System.out.print(1+"/"+num+"+");

total++;

/*得到余数的分子与分母,继续循环*/

fenMu = m * num;

fenZi = z*num - m;

}

}

System.out.println();

System.out.println("可分解为埃及数的个数为: "+total);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: