C++ 最大公约数排序

题目描述

给出一些整数对,请求出这些整数对的最大公约数,并对这些最大公约数按从小到大的顺序排序输出

输入描述

输入包含n行(1<n<100),每行含两个数a和b(1<a,b<100000),用空格隔开

输出描述

对于上面所有行输入,将其最大公约数按照从小到大的顺序输出在一行

输入样例

12 35
77 91
123 789
24 28
64 112
1024 888
98 54

输出样例

1 2 3 4 7 8 16
#include <iostream>
#include <algorithm> 

using namespace std;

int gcd(int da, int xiao){  // 求出2个数中的最大公约数
	int temp;
	while(xiao != 0){
		temp = da % xiao;
		da = xiao;
		xiao = temp;
	}
	return da;
}

int main(){
	int a, b;
	int s[100];  // 输入包含n行(1<n<100)
	int i = 0, j;
	
	while(cin >> a >> b){ // 持续对 a 和 b进行赋值,当输入非int类型的变量时,会停止输入,结束循环
		s[i] = gcd(a , b); // 调用gcd函数并把结果存入数组中
		i++;
	}
	
	sort(s, s+i);   // 对公约数进行从小到大排序,调用库中的排序方法
	
	for(j = 0; j < i -1; j++){  // 遍历数组中存放的最大公约数
		cout << s[j] << " ";  // 在后面没有使用 endl ,代码则不会换行输出
	}
	
	cout << s[j] << endl;
	
	return 0;
	
} 

版权声明:本文为qq_44989881原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。