题:有一个文件abc.txt,其中含有一些整数对,求出这些整数对的最大公约数,并对这些最大公约数按从小到大的顺序排序输出。
abc.txt内容如:
11 35
77 91
123 789
24 28
64 112
1024 888
98 54
最大公约数递归版:
/**//*递归求公约数*/
int gcd(int a,int b){ if(a%b==0) return b; return gcd(b,a%b);}
typedef vector<int> intMat;
typedef vector<intMat> Mat;
Mat mat;
intMat matGy; //最大公约数序列
void input(){
ifstream in("abc.txt");
int i=0,a;
for(string s;getline(in,s);i++){
intMat mat2;
for(istringstream sin(s);sin>>a;){
mat2.push_back(a);
}
mat.push_back(mat2);
}
}
void getGy(){
for(int x=0;x<mat.size();x++){
int gy = gcd(mat[x][0],mat[x][1]); //最大公约数
matGy.push_back(gy);
}
}
void sort(){
//sort,冒泡排序
for(int x=0;x<matGy.size();x++){
for(int y=matGy.size()-1;y>x;y--){
if(matGy[y]<matGy[y-1]){
int t = matGy[y];
matGy[y]=matGy[y-1];
matGy[y-1]=t;
}
}
}
}
void print(){
for(int x=0;x<matGy.size();x++){
cout<<matGy[x]<<" ";
}
}
int _tmain(int argc, _TCHAR* argv[])
{
input();
getGy();
sort();
print();
system("pause");
return 0;
}
运行结果:
1 2 3 4 7 8 16 Press any key to continue . . .