题目描述
小张是软件项目经理,他带领3个开发组。工期紧,今天都在加班呢。为鼓舞士气,小张打算给每个组发一袋核桃。他的要求是:
1. 各组的核桃数量必须相同
2. 各组内必须能平分核桃
3. 尽量提供满足1,2条件的最小数量
输入
输入包含三个正整数a, b, c,表示每个组正在加班的人数,用空格分开(a,b,c< 30)
输出
输出一个正整数,表示每袋核桃的数量。
样例输入
2 4 5
样例输出
20
题目大意:
求a,b,c三个数的最小公倍数。
方法一:
暴力求解(a*b*c = 30*30*30)总和不大。
#include<iostream>
using namespace std;
int work(int a,int b,int c){
for(int i=1;i<=a*b*c;i++){
if(i%a==0&&i%b==0&&i%c==0){
return i;
}
}
}
int main(){
int a,b,c;
cin>>a>>b>>c;
cout<<work(a,b,c)<<endl;;
}
方法二:
暴力求解的优化版。
先选三个数里最大为max。
已max为基数,遍历2max,3max……
此优化可以极大的减小循环次数。
#include <iostream>
using namespace std;
int main(void){
int a, b, c, i = 1;
cin>>a>>b>>c;
maxn = max(a,max(b,c));
num = maxn*i;
while (num % b != 0 || num % c != 0 || num % c != 0){
i++;
num = maxn * i;
}
cout<<num<<endl;
return 0;
}
方法三:
正规方法:先求最大公约数,再求最小公倍数。(拿其中两个数的最小公倍数和另一个数求最小公倍数)
#include <bits/stdc++.h>
using namespace std;
inline int gcd(int a, int b) { //模板
if (a % b == 0) return b;
else return gcd(b, a % b);
}
int main() {
int a, b, c;
cin >> a >> b >> c;
int x = a * b / gcd(a, b);
int ans = x * c/ gcd(x, c);
cout << ans;
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/103335.html