问题描述
小张是软件项目经理,他带领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;
}