题目描述
输入 10 个整数,彼此以空格分隔。
重新排序以后输出(也按空格分隔),要求:
- 先输出其中的奇数,并按从大到小排列;
- 然后输出其中的偶数,并按从小到大排列。
输入格式
任意排序的 10 个整数,彼此以空格分隔。
输出格式
按照要求排序后输出,整数之间由空格分隔。
数据范围
输入整数取值范围 [0,100][0,100]。
输入样例:
4 7 3 13 11 12 0 47 34 98
输出样例:
47 13 11 7 3 0 4 12 34 98
思路
用三个一维数组,第一个数组a用来存放输入的十个数,b用来存放偶数,c用来存放奇数,然后使用sort进行一个排序,b是从小到大排序,c从大到小。最后将两个数组拼成一个就行。这道题写的时候不认真把num1和num2弄混了,一顿设断点找错误。
代码:
#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(int x,int y){
return x > y;
}
bool cmp2(int x, int y) {
return x < y;
}
int main() {
int a[20], b[10], c[10] = {-1};
int i,num1=0,num2=0;
for (i = 0;i < 10;i++) {
b[i] = 10000;
}
for ( i = 0;i < 10;i++) {
cin >> a[i];
}
for (i = 0;i < 10;i++) {
if (a[i] % 2 == 0) {
b[num1] = a[i];
num1++;
}
else if (a[i] % 2 != 0) {
c[num2] = a[i];
num2++;
}
}
sort(b, b +10,cmp2);
sort(c, c + 10,cmp);
for (i = 0;i < num2;i++) {
if (c[i] >= 0) {
a[i] = c[i];
}
}
for (i = num2;i <10;i++) {
a[i] = b[i-num2];
}
for (i = 0;i < 10;i++) {
cout << a[i] << " ";
}
cout << endl;
return 0;
}