每日编程中遇到任何疑问、意见、建议请公众号留言或加入每日编程群聊739635399
最大公约数:输入n个数,求出这n个数的最小值,最大值以及他们的最大公约数。
输入格式:
第一行输入n
输入n个数(以空格隔开)
输出格式:
最小值 最大值 最大公约数
输入样例:
34 6 8
输出样例:
4 8 4
解决方法:
(1)算法的基本思想:
需要用到基本的数学思维求得最大公约数。
最大公约数的求法:这里采用辗转相除法来求得最大公约数
Tips:同样要掌握最小公倍数的求法。
这里给出示例代码:仅供学习。
最小公倍数=两数的乘积/最大公约数。
(2)代码实现:
#include<iostream>#include<math.h>usingnamespacestd;intfindMax(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;}intfindMin(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;}//采用辗转相除法求解最大公约数intdivision(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; } }}//最小公倍数intmultiNum(int a, int b){int sp = division(a, b);return a * b / sp;}intmain(){cout << "输入数据的个数:";int n = 0;cin >> n;int *arr = newint[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");return0;}
火车票订购:火车经过X站,火车最大载客人数为m,有n个订票请求,请求订购从a站到b站的k张票,若能满足订购要求则输出1,否则输出0.第一行有两个数,分别是n,m,接下来有n行,每行三个数分别为a,b,k.
输入格式:
第一行有两个数,分别是n,m,接下来有n行,每行三个数分别为a,b,k.
输出格式:
满足订购要求输出1,否则输出0输入样例:
5 104 10 98 12 29 12 114 20 830 300 15
输出样例:
10110
