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;
}
上一题
下一题