c++大虾求解

[复制链接]
查看11 | 回复2 | 2010-12-20 08:51:59 | 显示全部楼层 |阅读模式
//=====================
//5.3 最大公约数排序
//=====================
#include
#include
#include
using namespace std;
int maxC(int v1,int v2);//最大公约数
void swap(int &a,int &b);//交换排序
void main()
{
ifstream in("abc.txt");
vector a,cmp;
for(int i;in>>i;a.push_back(i));//读入abc.txt的数据,放进a向量
for(int j=0;j<a.size();++j)
{
int a1=a[j];
int b1=a[j+1];
int c=maxC(a1,b1);
cmp.push_back(c);//把各个公约数放进cmp向量
}
for(vector::size_type ix=0;ix<cmp.size();++ix)
for(vector::size_type ix2=ix+1;ix!=cmp.size();++ix2)
if(cmp[ix]<cmp[ix2])

swap(cmp[ix],cmp[ix2]);//排序cmp元素
for(int ii=0;i<cmp.size();++i)

cout<<cmp[ii]<<endl;//输出
}
int maxC(int v1,int v2)//最大公约数函数
{
while(v2)
{
int temp=v2;
v2=v1%v2;
v1=temp;
}
return v1;
}
void swap(int &a,int &b)//交换函数
{
int temp=b;
b=a;
a=temp;
}
这个是 最大公约数排序 的程序 vc6.0 上语法没错 可是运行的时候dos框都会出现没有响应的情况 ....
小弟搞不懂了,故来求解

回复

使用道具 举报

千问 | 2010-12-20 08:51:59 | 显示全部楼层
1. 你的循环中j+1超界了,要写成j<a.size()-1。
for(int j=0;j<a.size();++j)
{
int a1=a[j];
int b1=a[j+1];
// 这里超界了
int c=maxC(a1,b1);
cmp.push_back(c);//把各个公约数放进cmp向量
}2. 你的排序程序也超界。排序不需要自己写,用STL就行:std::sort( cmp.begin(), cmp.end() );或 std::sort( cmp.begin(), cmp.end(), great
回复

使用道具 举报

千问 | 2010-12-20 08:51:59 | 显示全部楼层
陷入死循环了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行