请高手来看看我的C++程序哪错了?

来源:百度知道 编辑:UC知道 时间:2024/05/24 12:36:50
4.编一个程序,对一组整数按各位数之和从小到大进行排序。排序算法可以使用选择、冒泡、插入法其中之一,但需要对大小关系的换一种方法理解。
#include<iostream>
using namespace std;
int total(int);
int main()
{
int a[5],sum[5];
cout<<"请输入5个数:";
for(int i=0;i<5;i++)
cin>>a[i];
for(int i=0;i<5;i++)
sum[i]=total(a[i]);
for(int i=1;i<5;i++)
for(int j=0;j<5-i;j++)
if(sum[j+1]<sum[j])
{
int temp;
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
for(int i=0;i<5;i++)
cout<<a[i]<<" ";
system("pause");
}
int total(int a)
{
int all=0;
while(a!=0)
{
all+=a%10;
a=a/10;
}
return all;
}

我看了你的程序,用的是冒泡法。
根本不用生命两个数组,本程序问题就处在下面这段代码:
for(int i=1;i<5;i++)
for(int j=0;j<5-i;j++)
if(sum[j+1]<sum[j])
{
int temp;
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
改成:
for(int i=0;i<4;i++)
for(int j=0;j<4-i;j++)
if(a[j+1]<a[j])
{
int temp;
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}

两重循环内的a[j+1]应该是a[j+i]

#include<iostream>
using namespace std;
int total(int);
int main()
{
int a[5],sum[5],i;
cout<<"请输入5个数:";
for(i=0;i<5;i++)
{
cin>>a[i];
}
for(i=0;i<5;i++)
{
sum[i]=total(a[i]);
}
for(i=0;i<4;i++)
{
for(int j=i+1;j<5;j++)
{
if(sum[i]<sum[j])
{
int temp;
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}
}
for(i=0;i<5