Problem Description
输入n个正整数,求出这n个数的最小值、最大值以及它们两的最大公约数,并输出。
Input
输入的第一行为n,下面一行为n个大于零的整数,用空格隔开。
Output
分别输出最小值、最大值和他们俩的最大公约数,用空格隔开。
Sample Input
3
4 8 6
Sample Output
4 8 4
解题思路
- 算法笔记p154最大公约数(辗转相除法)。
经验总结
- 建议和求最小公倍数代码一起记住。
代码实现(C)
#include <stdio.h>
#include <limits.h>
// 求最大公约数
int gcd(int a, int b) {
return !b ? a : gcd(b, a % b);
}
int main() {
int n;
while (~scanf("%d", &n)) {
int max = INT_MIN, min = INT_MAX;
int input;
for (int i = 0; i < n; ++i) {
scanf("%d", &input);
if (max < input) max = input;
if (min > input) min = input;
}
printf("%d %d %d", min, max, gcd(max, min));
}
return 0;
}