【面试题】一串数字,经转换后使所有奇数在所有偶数的前面,并且奇数偶数的相对顺序不变。
2013-03-06 22:06
387 查看
首先,如果不考虑相对顺序的话。。。。
可以使用两个指针 begin 和 end ,
为了保持相对位置的不变。
先让第一个位置为奇数,之后用一个指针记录插入的位置。把每个奇数插入到前面。这样就保证相对位置不变了。
同样的问题
调整一个字符串。
把字符串中的大写字母放在前面,小写字母放在后面,大写字母之间的相对顺序保持不变,小写字母也是。
可以使用两个指针 begin 和 end ,
#include <stdio.h> #include <iostream> using namespace std; void lmf(int A[], int n) { int end, begin, temp; end = n - 1; begin = 0; while (end > begin) { if ((A[end] & 1) && !(A[begin] & 1) ) { swap(A[begin],A[end]); --end; ++begin; } else { if (!(A[end] & 1)) { --end; } if (A[begin] & 1) { ++begin; } } } } int main(void) { int A[] = {6, 4, 3, 8, 10, 11, 12, 9}; int i, n = 8; lmf(A, n); for (i = 0;i < n; i++) { printf("%d ", A[i]); } printf("\n"); return 0; }
为了保持相对位置的不变。
先让第一个位置为奇数,之后用一个指针记录插入的位置。把每个奇数插入到前面。这样就保证相对位置不变了。
#include <stdio.h> void lmf(int A[], int n) { int i, j, temp, lastOdd; for (i = 0; i < n; i++) //找到数组中的第一个奇数放在A[0] { if (A[i] & 1) { temp = A[i]; for (j = i;j > 0; j--) { A[j] = A[j - 1]; } A[0] = temp; lastOdd = i; //之后从lastOdd + 1位置开始查找奇数 break; } } for (i = lastOdd + 1, lastOdd = 0; i < n; i++) { if (A[i] & 1) { temp = A[i]; for (j = i; j > lastOdd + 1; j--) //依次向前移动 { A[j] = A[j - 1]; } A[++lastOdd] = temp; } } } int main(void) { int A[] = {6, 4, 3, 8, 10, 11, 12, 9}; int i, n = 8; lmf(A, n); for (i = 0;i < n; i++) { printf("%d ", A[i]); } printf("\n"); return 0; }
同样的问题
调整一个字符串。
把字符串中的大写字母放在前面,小写字母放在后面,大写字母之间的相对顺序保持不变,小写字母也是。
//把一个字符串,的大写字母放在前面,小写字母放在后面,相对顺序保持不变。 #include <stdio.h> #include <stdlib.h> #include <string.h> void lmf(char *str) { int i, j, lastOdd; char temp; int n=strlen(str); for (i = 0; i < n; i++) //找到字符串中的第一个大写字母放在最前端 { //遇到大写字母 if (str[i] >= 'A' && str[i] <= 'Z') { temp = str[i]; for (j = i; j > 0; j--) { str[j] = str[j - 1]; } str[0] = temp; lastOdd = i; break; } } for (i = lastOdd + 1, lastOdd = 0; i < n; i++) { if(str[i] >= 'A' && str[i] <= 'Z') { temp = str[i]; for (j = i; j > lastOdd + 1; j--){ str[j] = str[j - 1]; } str[++lastOdd] = temp; } } } int main(void) { char str[]="abCDefG"; lmf(str); puts(str); return 0; }
相关文章推荐
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 剑指offer题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 12.输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 调整数组顺序使奇数位于偶数前面【相对为止不变】
- 将一个数组中所有的奇数放左边,偶数放右边,且原来数字的相对位置不变
- 调整数组顺序使奇数位于偶数前面,偶数和偶数之间的相对位置不变
- 输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于偶数前面
- 调整数组使奇数全部都位于偶数前面。 题目: 输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
- 将链表中的所有元素为奇数的节点移到元素为偶数节点的前面,并使奇数之间顺序反转,偶数之间顺序反转(创新工厂涂鸦移动面试题)