每日编程中遇到任何疑问、意见、建议请公众号留言或加入每日编程群聊739635399
最大公约数:输入n个数,求出这n个数的最小值,最大值以及他们的最大公约数。
输入格式:
第一行输入n
输入n个数(以空格隔开)
输出格式:
最小值 最大值 最大公约数
输入样例:
3
4 6 8
输出样例:
4 8 4
解决方法:
(1)算法的基本思想:
需要用到基本的数学思维求得最大公约数。
最大公约数的求法:这里采用辗转相除法来求得最大公约数
Tips:同样要掌握最小公倍数的求法。
这里给出示例代码:仅供学习。
最小公倍数=两数的乘积/最大公约数。
(2)代码实现:
#include <iostream>
#include <math.h>
using namespace std;
int findMax(int *arr, int n)
{
int max = arr[0];
for (int i = 1; i < n; i++)
{
if (arr[i] > max)
max = arr[i];
}
cout << max << " ";
return max;
}
int findMin(int *arr, int n)
{
int min = arr[0];
for (int i = 1; i < n; i++)
if (arr[i] < min)
min = arr[i];
cout << min << " ";
return min;
}
//采用辗转相除法求解最大公约数
int division(int a, int b)
{
//首先确定a,b的大小
if (b > a)
{
int temp = a;
a = b;
b = temp;
}
//一直求余数,直到余数为0;
while (true)
{
int p = a % b;
if (p == 0)
return b;
else
{
a = b;
b = p;
}
}
}
//最小公倍数
int multiNum(int a, int b)
{
int sp = division(a, b);
return a * b / sp;
}
int main()
{
cout << "输入数据的个数:";
int n = 0;
cin >> n;
int *arr = new int[n];
for (int i = 0; i < n; i++)
cin >> arr[i];
int a = findMin(arr, n);
int b = findMax(arr, n);
int spilt = division(a, b);
cout << spilt << endl;
int sp = multiNum(a, b);
cout << sp << endl;
system("pause");
return 0;
}
火车票订购:火车经过X站,火车最大载客人数为m,有n个订票请求,请求订购从a站到b站的k张票,若能满足订购要求则输出1,否则输出0.第一行有两个数,分别是n,m,接下来有n行,每行三个数分别为a,b,k.
输入格式:
第一行有两个数,分别是n,m,接下来有n行,每行三个数分别为a,b,k.
输出格式:
满足订购要求输出1,否则输出0输入样例:
5 10
4 10 9
8 12 2
9 12 1
14 20 8
30 300 15
输出样例:
1
0
1
1
0