1956: 序列排序

内存限制:256 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:32 解决:17

题目描述

对于给定的正整数序列,按照每个数的各位数和从大到小排序,各位数和相同的按照本身大小排序,大的在前,小的在后。

输入

第一行1个整数n,表示序列的大小。( 0 < n ≤ 1000) 第二行n个正整数,表示序列的每个数,每个数不大于100000000。

输出

输出按照题目要求排序后的序列

样例输入 复制

6
17 26 9 13 88 10 

样例输出 复制

88 9 26 17 13 10

提示

#include<bits/stdc++.h>
using namespace std;
int a[1010];
int cmp(int x,int y) {
	int _x=x,_y=y;
	int sx=0,sy=0;
	while (x>0) {
		sx+=x%10;
		x/=10;
	}
	while (y>0) {
		sy+=y%10;
		y/=10;
	}
	if (sx==sy)
	    return _x>_y;
	else 
	    return sx>sy;
}
int n;
int main(){
    cin>>n;
    for (int i=1;i<=n;i++) {
    	cin>>a[i];
	}
	sort(a+1,a+n+1,cmp);
	for (int i=1;i<=n;i++)
	    cout<<a[i]<<" ";
	return 0;
}