核桃数量

一开始这个题目把我整得懵懵的,后来问了一下覃同学才知道是求最小公倍数。

最小公倍数:
即 满足三个数的整除,   是三个数的倍数
其中一个为零则公倍数为零

 

题目描述:

核桃的数量 问题描述 小张是软件项目经理,他带领 3 个开发组。
工期紧,今天都在加班呢。为鼓舞士气,小张打 算给每个组发一袋核桃(据传言能补脑)。

他的要求是: 1. 各组的核桃数量必须相同

2. 各组内必须能平分核桃(当然是不能打碎的)

3. 尽量提供满足 1,2 条件的最小数量(节约闹革命嘛)
输入格式 输入包含三个正整数 a, b, c,表示每个组正在加班的人数,用空格分开(a,b,c<30
输出格式 输出一个正整数,表示每袋核桃的数量。
样例输入 1 2 4 5
样例输出 1 20
样例输入 2 3 1 1

方法二:(公式:gbs = a * b*c / gys(a,b,c))

#include<iostream>
using namespace std;

unsigned long GYS(unsigned a,unsigned b,unsigned c){
    if(b==0)
        return a;
    else
        return GYS(b,a%b&&c,b%c);
}


unsigned long GBS(unsigned a,unsigned b,unsigned c){
    if (a*b==0 && b*c==0 && a*c==0)
        return 0;
    return(a*b*c)/GYS(a,b,c);
}

void main(){
    unsigned long a,b,c;
    cout<<"请输入a,b,c"<<endl;
    cin>>a>>b>>c;

    unsigned long gbs=GBS(a,b,c);
    cout<<"gbs="<<gbs<<endl;
}

方法二:(穷举法)

 1 #include<iostream>
 2 using namespace std;
 3 
 4 unsigned long GBS(unsigned long a,unsigned b,unsigned c){
 5     if(a*b==0 && b*c==0)     //其中一个数为零,则最小公倍数为零
 6     return 0;
 7     unsigned long gbs = (a>b&&b>c)?a:b;   //找出最大的数
 8     while(1){
 9     if((gbs%a==0)&&(gbs%b==0)&&(gbs%c==0))  //能同时满足三个数的整除
10         break;
11         gbs++;
12     }
13     return gbs;
14 }
15 
16 void main(){
17     unsigned long a,b,c;
18     cout<<"请输入a,b,c"<<endl;
19     cin>>a>>b>>c;
20 
21     unsigned long gbs=GBS(a,b,c);   //???
22     cout<<"gbs="<<gbs;
23 }

核桃数量

上一篇:spfa判断负环


下一篇:Failed to determine a suitable driver class 错误修改