首页 > 代码库 > 华为机试(4)

华为机试(4)

中级题 
题目描述 
输入10个数字,按各个位上的和从小到大排序,如果相同,则按数字从小到大排序。    
输入描述 :10个正整数,保证都在int范围内,用空格隔开  
输出描述  :10个数字,其从大到小的值,用空格隔开,最后一个数字后不加空格 
输入样例 :11 3 2 4 5 9 8 7 10 6 
输出样例  :10 2 11 3 4 5 6 7 8 9 
解题思路:调用C++自带的sort函数,重新改写compare函数即可。

#include<string>#include<algorithm>#include<sstream>#include<iostream>#include<vector>using namespace std;bool cmp(string &s1,string &s2){   unsigned len1;   len1 = s1.size();   unsigned len2 ;   len2 = s2.size();   unsigned res1=0,res2=0;   for(unsigned i = 0;i<len1;i++)   {     res1 += (s1[i]-0);   }   for(unsigned j=0;j<len2;j++)   {     res2 +=(s2[j]-0);   }            if(res1==res2)   {          istringstream is1(s1),is2(s2);      unsigned d1,d2;      is1>>d1;      is2>>d2;         return (d1<d2);         }     return (res1<res2);  }void main(){       vector<string> ves(10,"");    for(int i=0;i<10;i++)        cin>>ves[i];    sort(ves.begin(),ves.end(),cmp);    for(int i=0;i<10;i++)    { 
cout
<<ves[i];
if(i!=9)
cout<<" ";
}
cout
<<endl; }