当前位置: 首页 > news >正文

1181:整数奇偶排序

1181:整数奇偶排序

时间限制: 1000 ms 内存限制: 65536 KB
提交数:52721 通过数: 34278
【题目描述】
给定10个整数的序列,要求对其重新排序。排序要求:

1.奇数在前,偶数在后;

2.奇数按从大到小排序;

3.偶数按从小到大排序。

【输入】
输入一行,包含10个整数,彼此以一个空格分开,每个整数的范围是大于等于0,小于等于30000。

【输出】
按照要求排序后输出一行,包含排序后的10个整数,数与数之间以一个空格分开。

【输入样例】
4 7 3 13 11 12 0 47 34 98

【输出样例】
47 13 11 7 3 0 4 12 34 98

#include<bits/stdc++.h>
using namespace std;// 自定义比较函数
bool cmp(int x, int y) {if (x % 2 != 0 && y % 2 != 0) {return x > y; // 奇数从大到小排序} else if (x % 2 == 0 && y % 2 == 0) {return x < y; // 偶数从小到大排序}return (x % 2 != 0); // 奇数在前,偶数在后
}int main() {int s[10];int temp[10];int oddCount = 0, evenCount = 0;// 读取输入for (int i = 0; i < 10; i++) {cin >> s[i];if (s[i] % 2 != 0) {temp[oddCount++] = s[i];}}// 对奇数数组进行排序sort(temp, temp + oddCount, cmp);int evenIndex = 0;for (int i = 0; i < 10; i++) {if (s[i] % 2 == 0) {temp[oddCount + evenIndex++] = s[i];}}// 对偶数数组进行排序sort(temp + oddCount, temp + oddCount + evenIndex, cmp);// 输出结果for (int i = 0; i < 10; i++) {cout << temp[i] << " ";}cout << endl;return 0;
}

return (x % 2 != 0); 这行代码在自定义比较函数 cmp 中起着关键作用,它确保了奇数在排序时会排在偶数前面。下面为你详细解释其工作原理。

1. 比较函数的作用

在 C++ 里,sort 等排序函数可以接受一个自定义的比较函数,这个函数会决定元素之间的比较规则。cmp 函数的返回值是一个布尔类型,当返回 true 时,表示第一个参数 x 应该排在第二个参数 y 前面;当返回 false 时,表示 x 应该排在 y 后面。

2. return (x % 2 != 0); 的逻辑

2.1 代码含义

x % 2 != 0 用于判断 x 是否为奇数。如果 x 是奇数,x % 2 的结果为 1,x % 2 != 0 就为 true;如果 x 是偶数,x % 2 的结果为 0,x % 2 != 0 就为 false

2.2 不同情况分析

  • 情况一:x 是奇数,y 是偶数
    x 是奇数时,x % 2 != 0true,这就意味着 x 应该排在 y 前面。例如,当 x = 3y = 4 时,3 % 2 != 0true,所以 cmp(3, 4) 返回 true,在排序时 3 会排在 4 前面。
  • 情况二:x 是偶数,y 是奇数
    x 是偶数时,x % 2 != 0false,这表示 x 应该排在 y 后面。例如,当 x = 2y = 5 时,2 % 2 != 0false,所以 cmp(2, 5) 返回 false,在排序时 2 会排在 5 后面。

3. 结合整个 cmp 函数来看

bool cmp(int x, int y) {if (x % 2 != 0 && y % 2 != 0) {return x > y; // 奇数从大到小排序} else if (x % 2 == 0 && y % 2 == 0) {return x > y; // 偶数从大到小排序}return (x % 2 != 0); // 奇数在前,偶数在后
}

这个函数分三种情况处理:

  • xy 都是奇数时,按从大到小排序。
  • xy 都是偶数时,也按从大到小排序。
  • xy 一个是奇数一个是偶数时,通过 return (x % 2 != 0); 确保奇数排在偶数前面。

4. 示例说明

假设有数组 [2, 3, 4, 1]sort 函数在排序过程中会多次调用 cmp 函数进行元素比较:

  • 比较 32 时,x = 3 是奇数,y = 2 是偶数,3 % 2 != 0true,所以 3 排在 2 前面。
  • 比较 34 时,x = 3 是奇数,y = 4 是偶数,3 % 2 != 0true,所以 3 排在 4 前面。
  • 比较 12 时,x = 1 是奇数,y = 2 是偶数,1 % 2 != 0true,所以 1 排在 2 前面。
  • 比较 14 时,x = 1 是奇数,y = 4 是偶数,1 % 2 != 0true,所以 1 排在 4 前面。

最终排序结果为 [3, 1, 4, 2],实现了奇数在前,偶数在后,且奇数和偶数内部按从大到小排序的要求。

综上所述,return (x % 2 != 0); 这行代码通过判断 x 是否为奇数,巧妙地实现了奇数在排序时排在偶数前面的功能。

http://www.jsqmd.com/news/486607/

相关文章:

  • Qwen2.5-0.5B轻量模型实测:单张显卡就能跑的智能对话系统
  • 单目深度估计的突破性实践:Depth Anything V2全解析与实战指南
  • Antd Table固定列避坑指南:为什么设置了fixed还是不出现横向滚动条?
  • 豆包AI生成图去水印免费方法
  • Phi-3-mini-128k-instruct惊艳效果展示:128K上下文下跨段落逻辑推理与事实一致性验证
  • YooAsset初始化全攻略:从零到实战应用
  • 2026年usb插座哪个品牌质量好?安全与实用之选推荐 - 品牌排行榜
  • 自适应滤波算法实战:从LMS到VSNLMS的MATLAB实现与性能对比
  • 从零构建LabVIEW TCP调试助手:实战指南与核心函数解析
  • Java绋嬪簭鍛橀潰璇曞疄褰曪細璋㈤鏈虹殑鎼炵瑧姹傝亴涔嬫梾
  • SecGPT-14B效果展示:生成MITRE ATTCK映射表、TTPs分析及检测规则建议
  • 最小二乘法实战指南:从数学原理到Python实现
  • 【立创训练营】基于CW32单片机的数字电压电流表设计与实现:从ADC采样到OLED显示
  • 2026年适合腰椎不适的护脊床垫推荐:五家优选品牌解析 - 科技焦点
  • Raptor实战:用冒泡排序搞定学生成绩排名(附完整流程图)
  • VLSI数字集成电路设计——时序电路的动态优化与静态权衡
  • Windows安卓运行工具:让APK应用在PC端流畅运行的完整方案
  • 2026移动排插什么牌子好?安全实用品牌推荐 - 品牌排行榜
  • AI辅助开发新体验:让快马平台智能理解并生成你的定制化高清乱码测试方案
  • Leather Dress Collection保姆级教学:WebUI中多LoRA叠加(如Cheongsam+V Dress)实操
  • Qwen3-ASR-1.7B在音乐识别中的惊艳表现:RAP歌词转写准确率突破
  • 2026自己在家染发用什么方便?温和便捷染发方案参考 - 品牌排行榜
  • Node.js后端服务集成:构建高并发的图像着色处理平台
  • SpringCloud-微服务拆分 - 努力-
  • # 发散创新:基于RBAC模型的权限管理系统在Go语言中的高效实现在现代软件
  • 从Lattice到EM:自动驾驶规划算法的演进与场景适配深度解析
  • CASS3D实战:OSGB模型在测绘中的高效应用
  • 2026年3c认证插座有哪些品牌?五大可靠品牌推荐 - 品牌排行榜
  • S7-1200与S7-200 SMART通信实战:5分钟搞定PROFINET配置(含TSAP避坑指南)
  • draw.io:零基础也能上手的免费流程图绘制利器