FAstril 2021-07-09 09:44 采纳率: 100%
浏览 15
已结题

给出n个大于0小于1000000000的数字,按每个数字之和从大到小的顺序打印出来。

例如,数字1234,每个数字的和是10,小于83,和是11,如果和是相同的,那么比较它们的ASCII码,例如,71小于8,81小于810。

  • 写回答

1条回答 默认 最新

  • 暗夜无风 2021-07-09 10:15
    关注
    #include <iostream>
    using namespace std;
    #include <vector>
    #include <algorithm>
    #include <string>
    
    #define N 1000
    
    int countN(int num)
    {
        int sum = 0;
        while (num)
        {
            sum += num % 10;
            num /= 10;
        }
        return sum;
    }
    
    bool cmpASCII(int op1, int op2)
    {
        string s1 = to_string(op1);
        string s2 = to_string(op2);
        int n1 = s1.size();
        int n2 = s2.size();
        for (int i = 0; i < n1 && i < n2; i++)
        {
            if (s1[i] < s2[i])
            {
                return false;
            }
            else if (s1[i] > s2[i])
            {
                return true;
            }
        }
        if (n1 < n2)
        {
            return false;
        }
        return true;
    }
    
    int main()
    {
        vector<int> arr;
        for (int i = 1; i < N; i++)
        {
            arr.push_back(i);
        }
    
        sort(arr.begin(), arr.end(), [&](int& op1, int& op2){
    
            return (countN(op1) == countN(op2) && cmpASCII(op1, op2))  || countN(op1) > countN(op2);
        });
    
        for (auto num : arr)
        {
            cout << num << endl;
        }
        
    
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月28日
  • 已采纳回答 9月20日
  • 创建了问题 7月9日

悬赏问题

  • ¥15 python摄像头画面无法显示
  • ¥15 关于#3d#的问题:d标定算法(语言-python)
  • ¥15 cve,cnnvd漏洞扫描工具推荐
  • ¥15 图像超分real-esrgan网络自己训练模型遇到问题
  • ¥15 如何构建全国统一的物流管理平台?
  • ¥100 ijkplayer使用AndroidStudio/CMake编译,如何支持 rtsp 直播流?
  • ¥15 用js遍历数据并对非空元素添加css样式
  • ¥15 使用autodl云训练,希望有直接运行的代码(关键词-数据集)
  • ¥50 python写segy数据出错
  • ¥20 关于线性结构的问题:希望能从头到尾完整地帮我改一下,困扰我很久了