【问题描述】
给定10个整数的序列,要求对其重新排序。排序要求:
1.奇数在前,偶数在后;
2.奇数按从大到小排序;
3.偶数按从小到大排序。。
【输入】
输入一行,包含10个整数,彼此以一个空格分开,每个整数的范围是大于等于0,小于等于30000。。
【输出】
按照要求排序后输出一行,包含排序后的10个整数,数与数之间以一个空格分开。。
【输入样例】
4 7 3 13 11 12 0 47 34 98
【输出样例】
47 13 11 7 3 0 4 12 34 98
【参考程序】
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
int n=10, num, p=0, q=0;
int a[11], b[11]; // a:存储奇数; b:存储偶数
for (int i=1; i<=n; i++) { // 输入原始10个数字
cin >> num;
if (num % 2 == 1) { // 奇数存储到数组a
a[++p] = num;
} else {
b[++q] = num; // 偶数存储到数组b
}
}
for (int i=1; i<p; i++) { // 奇数从大到小,选择排序
for (int j=i+1; j<=p; j++) {
if (a[i] < a[j]) {
swap(a[i], a[j]);
}
}
}
for (int i=1; i<q; i++) { // 偶数从小到大,选择排序
for (int j=i+1; j<=q; j++) {
if (b[i] > b[j]) {
swap(b[i], b[j]);
}
}
}
for (int i=1; i<=p; i++) { // 先输出奇数
printf("%d ", a[i]);
}
for (int i=1; i<=q; i++) { // 再输出偶数
printf("%d ", b[i]);
}
return 0;
}