现在对每个数的各个位数加起来的和从小到大排列
然后再把排列后的顺序按原数组值输出
比如a[]={46,22,15}
输出的是:22 15 46
我想了一个方法,但感觉效率不好,有没有更简洁的方法呢
大家一起讨论下吧
可以定为 int
我的思路是又设了个a数组,把各位数的和放到这个新数组1中
然后对新数组1序放到另一个数年数组2中
对数组2各元素查找它在数组1中的位置i,然后打出来a[i]
就这样,三个数组太麻烦了
有没有简单点的呢
#include<stdlib.h>
#include<iostream>
using namespace std;
int cmp ( const void *a , const void *b )
{
return *(int *)a - *(int *)b;
}
int convert(int tem)
{
int sum=0;
while(tem)
{
sum=sum+tem%10;
tem=tem/10;
}
return sum;
}
int main()
{
int num[3]={ 193, 392, 24};
int b[3]={0};
int c[3]={0};
int i,j;
for(i=0;i<3;i++)
cout<<num[i]<<" ";
cout<<endl;
for(i=0;i<3;i++)
{
b[i]=convert(num[i]);
c[i]=convert(num[i]);
}
qsort(c,3,sizeof(c[0]),cmp);
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
if(b[j]==c[i]) cout<<num[j]<<" ";
}
return 0;
}
谢谢各位了,上面就是我写的那个笨重算法
呵呵
楼上的那个看不明白,不知道那个调用
楼上上的那个还挺简洁的,有一点不妥就是不支持多2位数的,我写那个太笨重了