蓝桥杯训练核桃的数量

问题描述

小张是软件项目经理,他带领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
求解:这实际上是一个求三个数的最大公倍数问题,可以知道对整数A,B求最大倍数可以通过A/gcd(A,B)*B的方式,一定先除再乘以免过界,gcd为最大公约数,我们可以用折转相除发来获得,因此解决这个问题的代码如下:

#include <iostream>

#include <queue>

#include <iomanip>

#include <math.h>

#include <vector>

#include <string>

#include <algorithm>

#include <map>

#include<cstring>

#include<ctype.h>

#include<math.h>

using namespace std;

int gcd(int x,int y)

{

    while(x!=y)

    {

        if(x>y)

            x=x-y;

        else

            y=y-x;

    }

    

    return x;

}

int main(int argc, const char * argv[]) {

    int a,b,c;

    cin>>a;

    cin>>b;

    cin>>c;

    int t = a/gcd(a, b)*b;

    cout<<t/gcd(t,c)*c;

    return 0;

}

发表评论