测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A45696. 序列排序对于给定的正整数序列, 按照每个数的各位数和从大到小排序, 各位数和相同的按照本身大小排序, 大的在前, 小的在后。输入第一行 1 个整数 n,表示序列的大小。 ( 0 < n ≤ 1000) 第二行 n 个正整数, 表示序列的每个数, 每个数不大于 100000000。输出输出按照题目要求排序后的序列样例输入617 26 9 13 88 10样例输出88 9 26 17 13 10

填空题 较易

题目描述

序列排序

对于给定的正整数序列, 按照每个数的各位数和从大到小排序, 各位数和相同的按照本身大小排序, 大的在前, 小的在后。

输入

第一行 1 个整数 n,表示序列的大小。 ( 0 < n ≤ 1000) 第二行 n 个正整数, 表示序列的每个数, 每个数不大于 100000000。

输出

输出按照题目要求排序后的序列

样例输入

6

17 26 9 13 88 10

样例输出

88 9 26 17 13 10

参考答案

#include<iostream> using namespace std; int main() { int a=0,temp1,temp2, n, arr1[100], arr2[100] = { 0 }; cin >> n; for (int i = 0; i < n; i++) cin >> arr1[i]; for (int i = 0; i < n; i++) { int c = arr1[i]; while (c) { a = c % 10; arr2[i] += a;//数组arr2用于接收输入数组的元素各位数和 c = c / 10; } } for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (arr2[j] < arr2[j + 1])//冒泡排序实现数组arr1按arr2的大小排序 { temp2 = arr2[j + 1]; arr2[j + 1] = arr2[j]; arr2[j] = temp2; temp1 = arr1[j + 1]; arr1[j + 1] = arr1[j]; arr1[j] = temp1; } if (arr2[j] == arr2[j + 1])//各位数和相等时先输出较大的数 { if (arr1[j] < arr1[j + 1]) { temp1 = arr1[j + 1]; arr1[j + 1] = arr1[j]; arr1[j] = temp1; } } } } for (int i = 0; i < n; i++) cout << arr1[i] << " "; return 0; }
上一题 下一题