c语言编程:输入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
时间: 2024-02-09 16:11:02 浏览: 65
求n以内最大的k个素数以及它们的和(C)
以下是使用C语言实现的代码:
```c
#include <stdio.h>
#define MAX_N 10
int sum(int num) {
int res = 0;
while (num > 0) {
res += num % 10;
num /= 10;
}
return res;
}
int main() {
int n, nums[MAX_N], sums[MAX_N];
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &nums[i]);
sums[i] = sum(nums[i]);
}
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (sums[j] < sums[j + 1]) {
int tmp_sum = sums[j];
sums[j] = sums[j + 1];
sums[j + 1] = tmp_sum;
int tmp_num = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = tmp_num;
}
}
}
for (int i = 0; i < n; i++) {
printf("%d", nums[i]);
if (i != n - 1) {
printf(",");
}
}
return 0;
}
```
算法思路:
首先,我们需要一个函数来计算一个数的数字和,这里我们使用了一个 `sum` 函数。
接着,读入 `n` 个正整数,并分别计算它们的数字和,存储在两个数组 `nums` 和 `sums` 中。
然后,我们使用冒泡排序算法,按照数字和从大到小对 `nums` 数组进行排序。排序时,如果两个数的数字和相同,则按其输入时的先后顺序进行比较。
最后,按照要求输出排序后的 `nums` 数组即可。
阅读全文