核桃的数量(最小公倍数)

问题描述

小张是软件项目经理,他带领3个开发组。工期紧,今天都在加班呢。为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑)。他的要求是:

  1. 各组的核桃数量必须相同

  2. 各组内必须能平分核桃(当然是不能打碎的)

  3. 尽量提供满足1,2条件的最小数量(节约闹革命嘛)
    输入格式
    输入包含三个正整数a, b, c,表示每个组正在加班的人数,用空格分开(a,b,c<30)
    输出格式
    输出一个正整数,表示每袋核桃的数量。
    样例输入1
    2 4 5
    样例输出1
    20
    样例输入2
    3 1 1
    样例输出2
    3

求解:
思路: 目前知两个整数的最小公倍数求解公式,即 result = a * b / gcd(a,b)
gcd(a,b)为a.b的最大公约数。
那么三个整数的最大公约数为: c * result / gcd(c, restult)

代码如下:

import java.util.Scanner;

/** 
 * @author 作者 : Cactus
 * @version 创建时间:2018-3-24 下午01:59:12 
 * 采用for循环
 */
public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int a, b, c, r1 = 0;
        a = sc.nextInt();
        b = sc.nextInt();
        c = sc.nextInt();
        sc.close();
        for(int i = a < b ? a : b; i >= 1; i--){
            if(a % i == 0 && b % i == 0){
                r1 = a * b / i;
                break;
            }
        }
        for(int i = c < r1 ? c : r1; i >= 1; i--){
            if(c % i == 0 && r1 % i == 0){
                System.out.println(c * r1 / i);
                break;
            }
        }

    }
}
import java.util.Scanner;

/** 
 * @author 作者 : Cactus
 * @version 创建时间:2018-3-24 下午01:59:12 
 * 采用递归
 */
public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int a, b, c, r1 = 0;
        a = sc.nextInt();
        b = sc.nextInt();
        c = sc.nextInt();
        sc.close();
//      for(int i = a < b ? a : b; i >= 1; i--){
//          if(a % i == 0 && b % i == 0){
//              r1 = a * b / i;
//              break;
//          }
//      }
//      for(int i = c < r1 ? c : r1; i >= 1; i--){
//          if(c % i == 0 && r1 % i == 0){
//              System.out.println(c * r1 / i);
//              break;
//          }
//      }
        r1 = a * b / gcd(a, b);
        System.out.println(c * r1 / gcd(c, r1));

    }
    private static int gcd(int a, int b){
        if(a == 0){
            return b;
        }
        return gcd(b % a, a);
    }
}

从运算时间上来看,采用递归相较与采用for循环,运行效率要更高一些。
这里写图片描述

猜你喜欢

转载自blog.csdn.net/cactus_lrg/article/details/79677652