C++题目描述可多同学手里有 n 张卡片每张卡片上写了一个自然数他想把这些卡片里的偶数放前面奇数放后面并且奇数部分和偶数部分都从小到大排序请你写个程序帮帮他吧输入描述输入有两行第一行是一个整数 n 0 n 100000为卡片总数;第二行有 n 个整数分别为每张卡片上的数字输出描述520 4 2 3 1样例1输入520 4 2 3 1输出2 4 20 1 3
一种解决方案是遍历卡片,将偶数放入一个新的数组中,将奇数放入另一个新的数组中,然后对这两个数组进行排序,最后合并两个数组。
具体步骤如下:
- 从输入中获取卡片总数 n。
- 创建一个大小为 n 的整数数组 cards,并从输入中获取每张卡片的数字。
- 创建两个空的整数数组 even 和 odd。
- 遍历 cards 数组,如果当前卡片数字为偶数,则将其添加到 even 数组中;如果当前卡片数字为奇数,则将其添加到 odd 数组中。
- 对 even 数组和 odd 数组分别进行排序。
- 创建一个大小为 n 的整数数组 result。
- 将 even 数组的元素按顺序复制到 result 数组的前面。
- 将 odd 数组的元素按顺序复制到 result 数组的后面。
- 遍历 result 数组并输出每个元素的值。
下面是一种可能的实现方式:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
int n;
std::cin >> n;
std::vector<int> cards(n);
for (int i = 0; i < n; i++) {
std::cin >> cards[i];
}
std::vector<int> even;
std::vector<int> odd;
for (int i = 0; i < n; i++) {
if (cards[i] % 2 == 0) {
even.push_back(cards[i]);
} else {
odd.push_back(cards[i]);
}
}
std::sort(even.begin(), even.end());
std::sort(odd.begin(), odd.end());
std::vector<int> result(n);
std::copy(even.begin(), even.end(), result.begin());
std::copy(odd.begin(), odd.end(), result.begin() + even.size());
for (int i = 0; i < n; i++) {
std::cout << result[i] << " ";
}
return 0;
}
该程序首先读取卡片总数 n,然后依次读取每张卡片的数字。接下来,它创建两个空的数组 even 和 odd,并遍历 cards 数组将偶数和奇数分别添加到对应的数组中。然后,它对 even 数组和 odd 数组进行排序。接下来,它创建一个大小为 n 的数组 result,并将 even 数组的元素复制到 result 数组的前面,将 odd 数组的元素复制到 result 数组的后面。最后,它遍历 result 数组并输出每个元素的值
原文地址: http://www.cveoy.top/t/topic/h0oM 著作权归作者所有。请勿转载和采集!