输入一个长度不超过20的数字字符串,调整其顺序使奇数全部都位于偶数前面其他数字顺序不变。
时间: 2023-06-05 13:48:12 浏览: 230
可以使用双指针法,一个指针从左往右扫描奇数,另一个指针从右往左扫描偶数,然后交换两个指针所指的数字,直到两个指针相遇为止。具体实现可以参考以下代码:
```
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
cin >> s;
int i = , j = s.length() - 1;
while (i < j) {
while (i < j && (s[i] - '') % 2 == 1) i++;
while (i < j && (s[j] - '') % 2 == ) j--;
if (i < j) swap(s[i], s[j]);
}
cout << s << endl;
return ;
}
```
其中 `(s[i] - '') % 2 == 1` 表示判断第 i 个字符是否为奇数,`(s[j] - '') % 2 == ` 表示判断第 j 个字符是否为偶数。如果是奇数则 i 指针右移,如果是偶数则 j 指针左移,直到找到需要交换的两个数字,然后交换它们。最后输出调整后的字符串即可。
相关问题
输入一个长度不超过10的数字字符串,调整数组使奇数全部都位于偶数前面其他数字顺序不变。
可以使用双指针法,一个指针从数组头开始,一个指针从数组尾开始,分别向中间移动,当左指针指向偶数,右指针指向奇数时,交换两个数的位置,直到左指针和右指针相遇为止。这样就可以把奇数全部移到偶数前面,其他数字顺序不变。
输入一个长度不超过10的数字字符串,调整数组使奇数全部都位于偶数前面其他数字顺序不变。,用C++解决
好的,我可以帮你回答这个问题。
这道题可以使用双指针法,一个指针从数组最左边开始,另一个指针从数组最右边开始,然后根据指针所指向的数值是奇数还是偶数来交换它们的位置,直到两个指针相遇为止。
以下是使用C语言实现的代码:
```
#include <stdio.h>
void swap(int *x, int *y) {
int temp = *x;
*x = *y;
*y = temp;
}
void adjust_array(int arr[], int n) {
int left = 0, right = n-1;
while (left < right) {
while (left < right && arr[left] % 2 != 0) {
left++;
}
while (left < right && arr[right] % 2 == 0) {
right--;
}
if (left < right) {
swap(&arr[left], &arr[right]);
}
}
}
int main() {
int n;
printf("请输入数组长度:");
scanf("%d", &n);
int arr[10];
printf("请输入数组数字:");
for (int i=0; i<n; i++) {
scanf("%d", &arr[i]);
}
adjust_array(arr, n);
printf("调整后的数组为:");
for (int i=0; i<n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
希望这段代码可以帮助你解决问题!
阅读全文