王道 第三章 习题3.2整数奇偶排序

/*
* 整数奇偶排序
* 输入10个整数(0~100),彼此以空格分隔。重新排序以后输出(也按空格分隔),
* 要求: 
* 1.先输出其中的奇数,并按从大到小排列; 
* 2.然后输出其中的偶数,并按从小到大排列。
* 
* 方法1
* 可以在输入的时候就直接分两个数组存放,那么就可以直接调用sort
* 
* 方法2
* 输入完再重新排序,将奇数放在前一部分,重新编写一个sort的比较函数即可实现优先奇数,两个奇数大数在前,两个偶数小数在前的效果
*/
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

#define SIZE 10

bool comp(int x, int y) { //方法1控制奇数先输出大数
	return x > y;
}

bool cmp(int x, int y) { //方法2的排序函数
	if (x%2 != y%2)
		return x % 2 != 0; //优先奇数
	else
	{
		if (x % 2 == 1)
			return x > y; //奇数优先大数
		else
			return x < y; //偶数优先小数
	}
}

int main() {
	方法1 分开存放
	//int num = 0;
	//int count = 0; //控制输入结束后数据的处理输出
	//vector<int> odd;
	//vector<int> even;

	//while (cin >> num)
	//{
	//	count++;
	//	if (num % 2 == 1)
	//		odd.push_back(num);
	//	else even.push_back(num);

	//	if (count == 10)
	//	{ //输入结束
	//		sort(odd.begin(), odd.end(), comp);
	//		sort(even.begin(), even.end());
	//		for (int p1 = 0; p1 < odd.size(); ++p1) {
	//			cout << odd[p1];
	//			if (p1 != 9)
	//				cout << " ";
	//		}
	//		for (int p2 = 0; p2 < even.size(); ++p2) {
	//			cout << even[p2];
	//			if (p2 != 9)
	//				cout << " ";
	//		}
	//		cout << endl;
	//		count = 0;
	//		odd.clear();
	//		even.clear();
	//	}
	//}

	//方法2
	vector<int> num(SIZE);
	while (cin >> num[0] >> num[1] >> num[2] >> num[3] >> num[4] >> num[5] >> num[6] >> num[7] >> num[8] >> num[9])
	{
		sort(num.begin(), num.end(), cmp);
		for (int i = 0; i < SIZE; i++)
		{
			if (i != 0)
				cout << " ";
			cout << num[i];
		}
	}

	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值