时间限制: 1 Sec 内存限制: 128 MB
提交: 4600 解决: 898
[提交][状态][讨论版]
调整正整型数组使奇数全部都位于偶数前面,注意数组的遍历顺序要求为一方从左端开始向后,另一方从右端开始向前,若前数为偶数且后数为奇数,则进行交换,否则继续遍历。程序主体已经完成(请左键点击这里下载,文件在本地另存为main.c后答题),但其中包含若干错误,请根据题目要求改正程序中的所有错误,使其顺利达成题目功能要求。
正整型数组的元素个数sz(sz<4000),然后依次为数组各元素的整型值
交换过程,其格式为:Times 交换次数:数1<==>数2,每次交换占一行
然后输出交换后的数组各元素,元素之间用一个空格分隔,最后一个元素后无空格
9 1 2 3 4 5 6 7 8 9
Times 1: 2<==>9 Times 2: 4<==>7 1 9 3 7 5 6 4 8 2
- #define _CRT_SECURE_NO_WARNINGS 1
- #include
- #include
-
- /* 交换指针a和b所指向的两个整数 */
- void ex_num(int* a, int* b)
- {
- *a ^= *b;
- *b ^= *a;
- *a ^= *b;
- }
-
- /* 调整正整型数组a,其中n为数组元素的个数 */
- void exchange(int a[], int n)
- {
- int left, right;
- int cnt=1;
-
- left = 0;
- right = n-1;
- while (left < right)
- {
- if (!(a[left] & 1) && (a[right] & 1)) {
- printf("Times %d: %d<==>%d\n", cnt++, a[left], a[right]);
- ex_num(&a[left], &a[right]);
- }
- left = (a[left] & 1) ? left + 1 : left;
- right = !(a[right] & 1) ? right - 1 : right;
- }
- return;
- }
-
- int main()
- {
- int* arr, sz=0;
-
- scanf("%d", &sz);
- arr = (int*)malloc(sz * sizeof(int));
- if (arr == NULL) return 0;
- int i = 0;
- for (i = 0; i < sz; i++) {
- scanf("%d", &arr[i]);
- }
- exchange(arr, sz);
- for (i = 0; i < sz-1; i++) {
- printf("%d ", arr[i]);
- }
- printf("%d\n", arr[sz-1]);
- free(arr);
- return 0;
- }