题:输入三个数a,b,n,输出a和b不大于n的公倍数的所有个数。
这题的思想是先求得a和b的最大公约数,然后用a和b的积除以最大公约数,得到最小公倍数,再持续加上最小公倍数,直到超过n,记下n的个数。如:8,12,100,最大公约数为4,则最小公倍数为24。则公倍数为:24、48、72、96,即总共有4个。
代码如下:
1 #include<iostream> 2 #include<algorithm> 3 4 using namespace std; 5 6 int main() 7 { 8 int a, b, n; 9 cin >> a >> b >> n; 10 int minVal = min(a, b); 11 int maxVal = max(a, b); 12 int tem = 0; //最小公倍数 13 int val = 0; //最大公约数 14 15 if (maxVal%minVal == 0) 16 tem = maxVal; 17 else 18 { 19 while (maxVal%minVal != 0) 20 { 21 val = maxVal%minVal; 22 maxVal = minVal; 23 minVal = val; 24 } 25 tem = a*b / minVal; 26 } 27 28 int count = 1; 29 while (tem *count<= n) 30 { 31 count++; 32 } 33 cout <<count-1; 34 return 0; 35 }
还有一种直接的解法
1 #include<iostream> 2 #include<algorithm> 3 4 using namespace std; 5 6 int main() 7 { 8 int a, b, n; 9 cin >> a >> b >> n; 10 int maxVal = max(a, b); 11 int count = 0; 12 while (maxVal <= n) 13 { 14 if (maxVal%a == 0 && maxVal%b == 0) 15 count++; 16 maxVal++; 17 } 18 cout << count; 19 return 0; 20 }
以后一定要先想最简单的做法。
//招商信用