呵呵 思想都是按照关键字(各位求和)再排序 你的很好
只是我在传递数组时排的序,时间上稍微快点 但我完全用了标准库的东东,没什么算法可言
![](/skin/img/sigline.gif)
unicorn-h.spaces. ◇◆ sava-scratch.spaces.
呵呵 思想都是按照关键字(各位求和)再排序 你的很好
只是我在传递数组时排的序,时间上稍微快点 但我完全用了标准库的东东,没什么算法可言
#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位数的,我写那个太笨重了
上课回来了,这是我的方法。两个函数:
[CODE]int convert(int ival){
return ival % 10 + ival / 10;
}
void sort(int A[],int size){
for (int i = 1;i < size;++i){
if (convert(A[i]) < convert(A[i-1])){
int temp = A[i],j = i;
do{
A[j] = A[j-1];
--j;
}
while (j > 0 && convert(temp) < convert(A[j-1]));
A[j] = temp;
}
}
}
///////////////////////////////////////////////
///////////////////下面是测试//////////////////
int main(){
const int size = 8;
int list[size] = {12,99,81,46,33,10,66,77};
sort(list,size);
for (int i = 0;i < size;++i)
cout << list[i] << " ";
cout << endl;
return 0;
}[/CODE]
这位大哥的比较简洁,呵呵.给俺指明方向了啊.