时间限制: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
 
这是个求最小公倍数的题,我原先用的是两两求最小公倍数,再对求得的两个数求最小公倍数,这样比较烦。可以求得两个数的公倍数,将这个数与第三个数求公倍数,这样可以简化代码。
我原先的代码:
#include <cstdio>

int gcd(int m, int n)
{
    if(n == 0)
        return m;
    return gcd(n,m%n);
}

int gad(int m, int n, int x)
{
    return m*n/x;
}
int main()
{
    int a, b, c, ab,bb,result1, result2;
    while(scanf("%d%d%d",&a,&b,&c) == 3)
    {

      result1 = gcd(a,b);
      result2 = gcd(b,c);
      ab = gad(a,b,result1);
      bb = gad(b,c,result2);
      printf("%d\n",gad(ab,bb,gcd(ab,bb)));
    }
    return 0;
}