一开始这个题目把我整得懵懵的,后来问了一下覃同学才知道是求最小公倍数。
最小公倍数:
即 满足三个数的整除, 是三个数的倍数
其中一个为零则公倍数为零
题目描述:
核桃的数量 问题描述 小张是软件项目经理,他带领 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 }