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

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); 
        
    }


}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值