待修改代码(顿时感觉好官方):
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
while(cin>>n&&n)
{
int a[n];
int sum[n]//第一个注意点,以后开数组开的大一点,不要刚刚够用。比如说,题目中最大的数据量是100,那么数组可以开a[105];
sum[0]=0;//第二个注意点,你这个样只是对sum数组的第一个进行个赋值,sum[1]以及往后都没有赋值,应该把所能用到的sum数组都清零
for(int i=0; i<n; i++)
{
cin>>a[i];
}
for(int i=0; i<n; i++)
{
int k;
while(a[i])
{
k=a[i]%10;
a[i]/=10;
sum[i]+=k;
}//这个地方不要直接用a[i]来将每一位数剥下来,下面我会说。。。。。。
}
for(int i=0; i<n; i++)
{
for(int j=i; j<n; j++)
{
if(sum[i]>sum[j])
{
int temp;
temp=a[j];
a[j]=a[i];
a[i]=temp;//这个地方在比较sum时,不光要交换数组a的值,还需要交换数组sum的值,原因是冒泡排序是两个两个的比较,比如说一共有四个数,第一个数和第二个数相比,然后第二个数和第三个数相比,慢慢的比下去,若不交换并不能完成排序
}
}
}
for(int i=0; i<n; i++)
{
cout<<a[i]<<" ";
}//这个地方就是我前面说的数组a的问题了,在剥离完每一位数时,判断的条件是a[i]变为零,所以在将所有的数的每一位数都剥离完时,这个时候a[i]全都是0了,所以结果将全都是0.
cout<<endl;
}
return 0;
}
改好的代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
while(cin>>n&&n!=0)
{
int a[100];
int sum[100];
for(int i=0; i<100; i++)
{
sum[i]=0;
}//这是对数组sum清零的正确姿势。。。。还有一个库函数叫memset,这个函数很好用的,比如说要对sum进行清零,可以这样表示 memset(sum,0,sizeof(sum)); 这就完事了,函数中第一个参数代表数组名,第二个参数代表要将数组的每一个值设为什么值,比如说设为0,就写上0,第三个参数就代表数组的大小了。
for(int i=0; i<n; i++)
{
cin>>a[i];
}
for(int i=0; i<n; i++)
{
int k=a[i];
while(k)
{
int temp;
temp=k%10;
k/=10;
sum[i]+=temp;
}//在进行完之后a[i]并没有改变,但是a[i]的每一位数都已经存好了。
}
for(int i=0; i<n; i++)
{
for(int j=i; j<n; j++)
{
if(sum[i]>sum[j])
{
int temp;
temp=a[j];
a[j]=a[i];
a[i]=temp;
temp=sum[i];
sum[i]=sum[j];
sum[j]=temp;
}
}
}
for(int i=0; i<n; i++)
{
if(i==0)
cout<<a[i];
else
cout<<" "<<a[i];
}//控制空格,防止格式错误。
cout<<endl;
}
return 0;
}
用结构体打:
代码如下:
#include<bits/stdc++.h>
using namespace std;
struct node
{
int a;
int b;
} q[1000];//结构体的a参数用来存输入的数,结构体的b参数用来存输入的数的各个位数之和
int main()
{
int n;
while(cin>>n&&n!=0)
{
for(int i=1; i<=n; i++)
{
cin>>q[i].a;
q[i].b=0;
}//记得对b这个参数清零
for(int i=1; i<=n; i++)
{
int temp=q[i].a;
while(temp)
{
q[i].b+=temp%10;
temp/=10;
}
}
for(int i=1; i<=n; i++)
{
for(int j=i+1; j<=n; j++)
{
if(q[i].b>q[j].b)
{
int temp;
temp=q[i].b;
q[i].b=q[j].b;
q[j].b=temp;
temp=q[i].a;
q[i].a=q[j].a;
q[j].a=temp;
}
}
}
for(int i=1; i<=n; i++)
{
if(i==1)
{
cout<<q[i].a;
}
else
cout<<" "<<q[i].a;
}
cout<<endl;
}
return 0;
}
感觉你的代码打得还不错,就是一些小的问题,改正了就好了,加油(这上面自带的表情太少了,只能用仅有的几个了。。。)