奇偶数据调整

前言

NWAFU 2019阶段1_4


一、题目描述

题目描述

调整正整型数组使奇数全部都位于偶数前面,注意数组的遍历顺序要求为一方从左端开始向后,另一方从右端开始向前,若前数为偶数且后数为奇数,则进行交换,否则继续遍历。程序主体已经完成(请左键点击这里下载,文件在本地另存为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

二、设计步骤

最重要的考点在于动态内存分配,应当为(sz+1) * sizeof(int),否则会导致内存泄漏。

代码实现:

#include <stdio.h>
#include <stdlib.h>

/* 交换指针a和b所指向的两个整数 */  
void ex_num(int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}

/* 调整正整型数组a,其中n为数组元素的个数 */
void exchange(int a[], int n)
{
    int left, right;
    int cnt = 1;

    left = 0;
    right = n;
    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, i,sz;

    scanf("%d",&sz);
    arr=(int *)malloc((sz+1) * sizeof(int));
    if (arr==NULL) return 0;
    for (i = 0; i < sz; i++)  {
        scanf("%d", &arr[i]);
    }
    exchange(arr, sz);
    for (i = 0; i < sz; i++) {
        if(i)
            printf(" ");
        printf("%d", *(arr+i));
    }
    printf("\n");
    free(arr);
    return 0;
}

总结

EOF

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值