问题标题: 酷町堂:3825 有趣的排序

0
0
已解决
王月
王月
资深守护
资深守护

3825   有趣的排序

经验值:1200 时间限制:1000毫秒

题目描述 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

 

 

 

 

WA30

#include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
string a[20010];
int sum(string a){
    int s=0;
    for(int i=0;i<a.size();i++){
        s+=a[i]-'0';
    }
    return s;
}
bool cmp(string a,string b){
    if(sum(a)!=sum(b)){
        return sum(a)>sum(b);    
    }
    return a<b;
}
int main(){
    int n;
    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;
}

 


0
已采纳
潘艺博
潘艺博
初级天翼
初级天翼

第一个函数要用到循环取位数

函数思路:定义函数int sm(int x),函数里定义sum变量,清零,再写while循环,while(x),while里面定义s=x%10,sum累加s,x/=10(循环取位数格式),返回sum

定义a数组用int型就可以了,存的下

其他的就没什么问题了~

望采纳~~

潘艺博在2021-08-29 15:54:45追加了内容

对了,你第二个函数定义形参也是int型

0
被禁言 张皓轩
张皓轩
中级光能
中级光能
核心:
int weishu(long long x){
    long long sum=0;
    for(;x;x/=10){
        sum+=x%10;
    }
    return sum;
}
bool cmp(int x,int y){
    if(weishu(x)!=weishu(y)){
        return weishu(x)>weishu(y);
    }
    return x<y;
}
主函数自己想
求采纳

 

0
我要回答