输入50个正整数,将其中的偶数按升序排列,奇数按降序排列。若偶数个数多于奇数个数,则偶数放在数组的前边,奇数放在其后;否则奇数放在前,偶数在后;输出排序后的结果。
#include <iostream> #include <cstdio> #include <algorithm> /** * 奇数在前,从大到小;偶数在后,从小到大 */ using namespace std; bool Compare1(int x,int y){ //如果两个都是奇数 if(x % 2 == 1 && y % 2 == 1){ //从大到小 return x > y; }else if(x % 2 == 0 && y % 2 == 0){ return x < y; }else if(x % 2 == 0 && y % 2 == 1){ return true; }else{ //偶数在前 return false; } } bool Compare2(int x,int y){ //如果两个都是奇数 if(x % 2 == 1 && y % 2 == 1){ //从大到小 return x > y; }else if(x % 2 == 0 && y % 2 == 0){ return x < y; }else if(x % 2 == 0 && y % 2 == 1){ return false; }else{ return true; } } int arr[10]; int main(){ int n; int even = 0; //偶数个数 int odd = 0; //奇数个数 while(scanf("%d",&n)!=EOF){ for(int i = 0;i < n;i++){ scanf("%d",&arr[i]); if(i % 2){ ++odd; }else{ ++even; } } if(odd > even){ //奇数个数多 ,奇数在前 sort(arr,arr+n,Compare1); }else{ sort(arr,arr+n,Compare2); } for(int i = 0;i < n;i++){ printf("%d ",arr[i]); } } return 0; }