平平无奇的编程萌新 2022-03-15 19:48 采纳率: 95.2%
浏览 93
已结题

程序设计 -- 整数排序

我们有 N个正整数,均小于 10000。现在需要将这些正整数按照该正整数每一位数字相加的和从小到大排序,即该正整数的每一位数字相加的和越小排位越靠前。如果各位相加和相等,则按照正整数的值从小到大排序。
输入格式
输入有 2 行
第一行为一个整数 NN,0 < N < 101;
第二行为用空格隔开的 N个正整数,均小于 10000。
输出格式
输出有 1 行,为按照题目要求排序后的 N 个正整数,用空格隔开。
样例
输入
4
20 12 1 11
输出
1 11 20 12
想请问一下能改一改下面这个程序吗

#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(int x,int y){
    int sum=0,num=0;
    while(x<=0){
        sum+=x%10;
        x/=10;
    }
    while(y<=0){
        num+=y%10;
        y/=10;
    }
    if(sum>num)return 0;
    else if(sum<num)return 1;
    return x<y;
}
int main(){
    int a[1001];
    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]<<" ";
    }
}

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-03-15 20:52
    关注

    修改处见注释,供参考:

    #include <iostream>
    #include <algorithm>
    using namespace std;
    bool cmp(int x,int y){
        int sum=0,num=0,tmp_x=x,tmp_y=y;//修改
        while(x){ //while(x<=0){        //修改
            sum+=x%10;
            x/=10;
        }
        while(y){ //while(y<=0){        //修改
            num+=y%10;
            y/=10;
        }
        if(sum == num)    //修改 if(sum>num)return 0;
            return tmp_x < tmp_y;       //修改
        else             //修改  else if(sum<num)return 1;
            return sum < num;
                         //return x>y;
    }
    int main(){
        int a[1001];
        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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月24日
  • 已采纳回答 3月16日
  • 创建了问题 3月15日

悬赏问题

  • ¥100 求抖音ck号 或者提ck教程
  • ¥15 关于#linux#的问题:子进程1等待子进程A、B退出后退出(语言-c语言)
  • ¥20 web页面如何打开Outlook 365的全球离线通讯簿功能
  • ¥15 io.jsonwebtoken.security.Keys
  • ¥15 急,ubuntu安装后no caching mode page found等
  • ¥15 联想交换机NE2580O/NE1064TO安装SONIC
  • ¥15 防火墙的混合模式配置
  • ¥15 Ubuntu不小心注销了要怎么恢复啊
  • ¥15 win10电脑安装完plcsim advanced4.0运行时为什么会提示找不到虚拟网卡
  • ¥15 安装powerbuilder10卡在安装程序正在运行这个页面 没有下一步任何指令