问题标题: 酷町堂:3825

1
0
已解决
王雨婷
王雨婷
高级守护
高级守护

3825   有趣的排序

题目描述 Description

小明最近学习了很多的排序算法。老师想检验一下他的水平,给他出了一道题目:现在有n个数字,需要将他们按照位数之和从大到小的顺序进行排列,如果位数之和相同的话,则在按照数值大小,从小到大排列。

输入描述 Input Description

第一行输入一个整数n(n<=20000),表示数据的个数。
第二行输入n个空格隔开的整数,数值不超过100,000,000。

输出描述 Output Description

输出一行,n个空格隔开排序后的数据

样例输入 Sample Input

 

5
321 132 456 345 567

样例输出 Sample Output

 

567 456 345 132 321

#include <iostream>
#include <algorithm>
using namespace std;
int a[20001],n;
bool cmp(int a,int b)
{
    int s=0,r=0,x=a,y=b;
    while (x)
    {
        s+=n%10;
        x/=10;
    }
    while (y)
    {
        r+=n%10;
        y/=10;
    }
    if (s!=r) return s<r;
    else return a>b;
}
int main()
{
    int n;
    cin>>n;
    for (int i=1;i<=n;i++)
    cin>>a[i];
    sort(a+1,a+1+n,cmp);
    for (int i=1;i<=n;i++)
    cout<<a[i]<<" ";
    return 0;
}

 


0
已采纳
宣海宁
宣海宁
中级光能
中级光能

这都不会???

 

宣海宁在2019-07-30 18:01:53追加了内容

首先我们要两个函数(一个是排序规则的,另一个是求数位之和的),然后就是互相调用,就行啦~

 

—————————————————————————————————————————————————

插句题外话:

    以你的实力,这都做不出来?

0
王鹤宁
王鹤宁
中级守护
中级守护

水贴

水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴水贴

0
我要回答