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

本文介绍了一种整数奇偶排序算法,该算法接收10个整数输入,并将其分为奇数和偶数两部分。奇数部分按从大到小排序,偶数部分按从小到大排序。提供了两种实现方法:一是分别存储奇数和偶数并独立排序;二是统一存储后使用特定比较函数进行排序。
/*
* 整数奇偶排序
* 输入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;
}

王道《计算机组成原理》是一本非常经典的教材,在学习计算机硬件结构、系统设计等方面有很高的指导价值。本书的每一章节都包含了大量的理论知识以及习题,帮助读者通过实践加深理解。 针对第二章“数据表示”这部分的内容,通常包括以下几个方面: ### 数据表示的基本概念 - **数制转换**:掌握二进制、八进制、十进制、十六进制之间的相互转换。 - **补码表示法**:理解正数和负数在计算机中的补码表示,以及如何计算。 - **原码、反码与补码的区别**:了解这三种表示方法的特点及应用场景。 - **溢出判断**:学习如何检测和处理数值运算过程中可能出现的溢出情况。 ### 第二章习题解析概览 #### 练习题目的多样性 - **基本概念应用**:提供一些简单的题目让学生直接应用所学的概念解答,如将特定的十进制数转换为二进制或十六进制。 - **逻辑思考题**:涉及对补码的理解及其在加减法操作中的应用,比如要求学生写出给定数值的补码形式,并进行相应的加法操作。 - **实际案例分析**:给出具体的计算机指令或电路模块,要求学生分析其工作原理和数据流,如解释一个简单ALU的操作过程,或是分析存储器读写的流程图。 - **错误排查**:给出一段代码或电路描述,要求识别潜在的逻辑错误并说明原因,比如指出在一个加法器中可能导致结果错误的原因。 #### 解题技巧 1. **扎实基础**:确保对于基本的数据表示规则和逻辑运算有深入理解。 2. **逻辑推理**:在解决需要推理的问题时,明确步骤,逐步推导结论,避免跳过重要细节。 3. **实践经验**:尽量结合真实设备或模拟环境进行练习,如使用仿真软件模拟计算机系统的运行。 4. **对比差异**:对于相似概念或表达方式(如补码与原码),学会对比它们的区别和应用场景,增强辨别能力。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值