C语言调整输入数组A[0..n],将其分为两部分,左边所有元素为奇数,右边所有元素为偶数 【输入形式】a0,b1,b2,a1,a2,b3,a3,a4 【输出形式】a0,a1,a2,a3,a4,b1,b2,b3 【样例输入】1,2,33,8,5 【样例输出】1,33,5,2,8
时间: 2024-09-20 10:17:08 浏览: 46
C语言之一维数组(第2讲).docx
在C语言中,你可以使用两个指针来实现这个功能,一个指向数组的开始(`start`),另一个指向数组的结束(`end`)。然后遍历数组,将每个元素与其对应的索引一起检查:
1. 如果当前元素是奇数(`*(start++) % 2 == 1`),就将它移动到新数组的前面;
2. 否则,如果它是偶数,就直接跳过并将`end`向前移动一位。
当找到第一个奇数后,`start`会停在那个位置,而`end`会在所有偶数之后。最后,返回从数组开头到`start-1`的元素作为结果,以及从`start`到`end`的所有元素。
下面是一个简单的示例代码实现:
```c
#include <stdio.h>
void separate_odd_even(int arr[], int n, int *result) {
int i = 0;
for (int j = 0; j < n; ++j) {
if (arr[j] % 2 != 0) { // 奇数
result[i++] = arr[j]; // 移动到新数组
}
}
// 将剩余的偶数复制到结果数组
while (i < n) {
result[i++] = arr[j++];
}
}
// 测试函数
int main() {
int input[] = {1, 2, 33, 8, 5};
int output[2*5] = {0}; // 假设最大的输入数组长度是10
int n = sizeof(input) / sizeof(input[0]);
separate_odd_even(input, n, output);
printf("分离后的数组:");
for (int k = 0; k < n; ++k) {
printf("%d", output[k]);
if (k != n - 1) printf(", ");
}
return 0;
}
```
运行上面的代码,你会得到期望的输出格式:
```
样例输出:1, 33, 5, 2, 8
```
阅读全文