A19851. 奇偶排序
填空题
容易
知识点
题目描述
奇偶排序
题目描述
小明最近在学习排序算法。老师说在排序算法中两个数字的比较可能是简单的比大小,也可能是一个复杂的逻辑表达式。为了测试小明的学习情况,老师给了他一个包含10个整数的序列,要求对其重新排序。排序要求:
(1)奇数在前,偶数在后;
(2)奇数按从大到小排序;
(3)偶数按从小到大排序。
输入格式
仅一行,10个整数,用空格分隔。
输出格式
仅一行,排序结果,用一个空格分隔。
输入样例1
4 7 3 13 11 12 0 47 34 98输出样例1
47 13 11 7 3 0 4 12 34 98输入样例2
8 22 55 11 3 2 4 1 56 4输出样例2
55 11 3 1 2 4 4 8 22 56参考答案
参考1:
#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;
int a[10]={0};
int b[10]={0};
int main(int argc, char *argv[])
{
int n,al,bl,i;
al=bl=0;
for(i=0;i<10;i++){
scanf("%d",&n);
if(n%2==0) b[bl]=n;bl++;
else a[al]=n;al++;
}
sort(a,a+al);
for(i=al-1;i>=0;i--)printf("%d ",a[i]);
sort(b,b+bl);
for(i=0;i<bl;i++)printf("%d ",b[i]);
return 0;
}
参考2:
#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;
int cmp(int x,int y)
{
if(x%2!=y%2) return x%2>y%2;
if(x%2==0) return x<y;
else return x>y;
}
int main(int argc, char *argv[])
{
int i,j,a[10]={0};
for(i=0;i<10;i++)scanf("%d",&a[i]);
sort(a,a+10,cmp);
for(i=0;i<10;i++)printf("%d ",a[i]);
return 0;
}
上一题
下一题