身上无钱你莫邪

moye's c++ blog

C++求最大公约数及冒泡排序

题:有一个文件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 . . .

posted on 2008-12-16 11:31 莫耶 阅读(1300) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


公告

导航

<2009年2月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
1234567

统计

常用链接

留言簿(3)

随笔档案

友情链接

搜索

最新评论

阅读排行榜

评论排行榜