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); } }
埃及分数怎么计算java_[蓝桥杯][java]埃及分数解法
最新推荐文章于 2021-07-26 01:04:31 发布