历届试题 核桃的数量
时间限制:1.0s 内存限制:256.0MB
问题描述
小张是软件项目经理,他带领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
也是有段时间没有看到GCD啊,我相信这是无数初入OI界的同学a过无数遍的算法!充满回忆!却是脚踏实地,前面的GCD,有哪来后面的DP,线段树?
膜拜,欧几里得,膜拜GCD!
import java.io.*;
import java.util.*;
public class Main
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
int a[] = new int[3];
for (int i = 0; i < 3; i++)
{
a[i] = input.nextInt();
}
Arrays.sort(a);
int temp = GCD(a[0], a[1]); // 最小的两个数的GCD(最大公约数)
temp = (a[0] * a[1]) / temp; // 最小的两个数的最小公倍数
int temp2 = GCD(temp, a[2]); // 第一个最小公倍数和最大的那个数的GCD(最大公约数)
temp = (temp * a[2]) / temp2; // 第一个最小公倍数和最大的那个数的最小公倍数(说的复杂其实简单.....)
System.out.println(temp);
}
public static int GCD(int b, int c)
{
while (b != 0)
{
int temp = c % b;
c = b;
b = temp;
}
return c;
}
}