C++题目描述可多同学手里有 n 张卡片每张卡片上写了一个自然数他想把这些卡片里的奇数放前面偶数放后面并且奇数部分从小到大偶数部分从大到小排序请你写个程序帮帮他吧输入描述输入有两行第一行是一个整数 n 0 n 100000为卡片总数;第二行有 n 个整数分别为每张卡片上的数字输出描述输出符合题目要求的数据的排列方式每个数据之间使用一个空格分开样例1输入520 4 2 3 1输出1 3 20 4
一种简单的解决方法是使用两个数组,一个存放奇数,一个存放偶数。首先遍历输入的数字,将奇数放入奇数数组,偶数放入偶数数组。然后对奇数数组进行从小到大的排序,对偶数数组进行从大到小的排序。最后将奇数数组和偶数数组合并输出即可。
C++代码如下:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
int n;
std::cin >> n;
std::vector<int> odd; // 存放奇数
std::vector<int> even; // 存放偶数
for (int i = 0; i < n; i++) {
int num;
std::cin >> num;
if (num % 2 == 0) {
even.push_back(num);
} else {
odd.push_back(num);
}
}
// 对奇数数组进行从小到大的排序
std::sort(odd.begin(), odd.end());
// 对偶数数组进行从大到小的排序
std::sort(even.begin(), even.end(), std::greater<int>());
// 输出合并后的结果
for (int i = 0; i < odd.size(); i++) {
std::cout << odd[i] << " ";
}
for (int i = 0; i < even.size(); i++) {
std::cout << even[i] << " ";
}
return 0;
}
输入为:
5
20 4 2 3 1
输出为:
1 3 20 4 2
``

原文地址: http://www.cveoy.top/t/topic/h0pb 著作权归作者所有。请勿转载和采集!