BSKDY 2023-06-06 17:26 采纳率: 100%
浏览 104
已结题

按数字和大小依次输出各数

按数字和大小依次输出各数
输入n个正整数(1<n<=10),然后按照每个数的数字和(取该数的各位数字相加)的大小,从大到小输出这n个数(如果其中有几个数的数字和相同,则这几个数按其输入时的先后顺序输出)

输入格式:
先输入n;
再输入n个正整数

输出格式:
按数字和的大小从大到小输出这n个数,数与数之间用“,”进行分隔。

输入样例:
10
1 2 3 4 5 11 12 13 21 22
输出样例:
5,4,13,22,3,12,21,2,11,1
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

  • 写回答

4条回答 默认 最新

  • Leodong. 2023-06-06 17:42
    关注

    该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
    以下是C语言的代码实现:

    #include <stdio.h>
    #include <stdlib.h>
    
    // 计算数字和
    int digit_sum(int n)
    {
        int sum = 0;
        while (n)
        {
            sum += n % 10;
            n /= 10;
        }
        return sum;
    }
    
    // 比较函数,用于排序
    int cmp(const void *a, const void *b)
    {
        int x = *(int*)a, y = *(int*)b;
        int sum_x = digit_sum(x), sum_y = digit_sum(y);
        if (sum_x != sum_y) return sum_y - sum_x;  // 按数字和从大到小排序
        else return x - y;  // 如果数字和相同,按输入时的先后顺序排序
    }
    
    int main()
    {
        int n, i;
        int a[10];
        scanf("%d", &n);
        for (i = 0; i < n; i++)
        {
            scanf("%d", &a[i]);
        }
        qsort(a, n, sizeof(int), cmp);  // 使用快速排序算法排序
        for (i = 0; i < n; i++)
        {
            printf("%d", a[i]);
            if (i != n - 1) printf(",");
        }
        return 0;
    }
    

    首先定义了一个函数 digit_sum,用于计算一个数的数字和。然后定义了一个比较函数 cmp,用于排序。在 cmp 函数中,先计算两个数的数字和,如果数字和不同,则按数字和从大到小排序;如果数字和相同,则按输入时的先后顺序排序。最后使用 qsort 函数进行排序。

    在主函数中,先读入输入的数列,然后调用 qsort 函数进行排序。最后按照排序后的顺序输出数列中的数,数与数之间用逗号进行分隔。


    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 6月30日
  • 已采纳回答 6月22日
  • 创建了问题 6月6日