题解 | #整数奇偶排序# 王道机试指南 第二章 排序
整数奇偶排序
https://www.nowcoder.com/practice/bbbbf26601b6402c9abfa88de5833163
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; bool comp(int x, int y) { //如果两个数是奇数,按从大到小,降序 return > if (x % 2 == 1 && y % 2 == 1) return x > y; //大的值在前面 else if (x % 2 == 0 && y % 2 == 0) //两个数是偶数 return x < y; else //一个奇数一个偶数 return x % 2 > y % 2; //奇数在前,偶数在后 很巧妙,为奇数时,x%2==1> 为偶数x%2==0 } int main() { int data[10]; int i; while (cin >> data[0]) { //当第一个输入的数不为EOF时 for (i = 1; i < 10; i++) cin >> data[i]; //输入9个数 //接下来进行排序 sort(data, data + 10, comp); //comp自定义 //输出 for (i = 0; i < 10; i++) cout << data[i] << ' '; } return 0; }
习题3.2 | 整数奇偶排序(北京大学复试上机题) |
很巧妙的求解思路
在sort的comp函数中施展比较的特性
巧妙利用x%2 与 奇数偶数的性质
参考
https://blog.nowcoder.net/n/71badf5723af42c79a40a0493ee38572?f=comment