简单数据处理一,请帮帮我

问题遇到的现象和发生背景

描述
给定n(n是偶数,且n≤100)个正整数,所有正整数均≤10000;从前往后依次遍历这个数组,每两个为一组进行处理,若一组中的两个元素恰好一个为奇数,一个为偶数,则交换这两个元素的位置;否则不动;全部处理完成后,逆序输出整个数组。

例如给定序列: 62 12 25 55 , 处理完成后得到:55 25 12 62

给定序列: 6 7 3 4 ,处理完成后得到:3 4 6 7

给定序列: 68 71 99 12 19 23 , 处理完成后得到:23 19 99 12 68 71

给定序列:2 79 27 72 54 63 23 61 , 处理完成后得到:61 23 54 63 27 72 2 79

格式
输入格式
输入为两行。第一行是一个正整数n,表示有多少个数据。第二行是n个正整数组成的序列。
输出格式
输出一行n个正整数,是上述序列处理之后的结果。
样例
输入样例
10
46 70 22 83 12 43 32 36 25 22
输出样例
25 22 36 32 12 43 22 83 70 46

#include <stdio.h>

#define N 100

int main()
{
    int n;
    int a[N];
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
        scanf("%d", &a[i]);
    for (int i = 0; i < n; i += 2)
    {
        if ((a[i] + a[i + 1]) % 2 != 0)
        {
            int t = a[i];
            a[i] = a[i + 1];
            a[i + 1] = t;
        }
    }
    for (int i = n - 1; i >= 0; i--)
        printf("%d ", a[i]);
    return 0;
}

供参考:

#include <stdio.h>
#define N  101
int main()
{
    int a[N], n, i, t;
    do {
        scanf("%d", &n);
    } while (n > 100 || n % 2 != 0);
    for (i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
        if (i % 2 == 1) {
            if (a[i - 1] % 2 != a[i] % 2) {
                t = a[i - 1]; a[i - 1] = a[i]; a[i] = t;
            }
        }
    }
    for (i = n - 1; i >= 0; i--)
        printf("%5d", a[i]);
    return 0;
}

直接for循环就可以啊,判断是否一奇一偶可以这样i%2==0&&i+1%2==0

img

#include <stdio.h>
void print(int arr[],int n)
{
    //……(打印数组)
    int j;
    for(j=0;j<n;j++)
    {
        printf("%d  ",arr[j]);
    }
    printf("\n");
}
void reverse(int arr[],int n)
{
    int left = 0;
    int right = n-1;
    int j;
    for(j=0;j<n/2;j++)
    {
        int tem=arr[left];
        arr[left]=arr[right];
        arr[right]=tem;
        left++;right--;
    }
    
    //……(实现数组转置)
}

void fun(int t[],int n)
{
    int j;
    for(j=0;j<n-1;j+=2)
    {
        if((t[j]%2==0&&t[j+1]%2!=0)||(t[j]%2!=0&&t[j+1]%2==0))
        {
            int tem=t[j];
            t[j]=t[j+1];
            t[j+1]=tem;
        }
    }
}
int main()
{
    int n;
    scanf("%d",&n);
    int arr[n];
    int j;
    for(j=0;j<10;j++)
    {
        scanf("%d",&arr[j]);
    }
    int sz=n;
    fun(arr,sz);
    reverse(arr,sz);//    ……(调用转置函数reverse)
    print(arr,sz);//    …… (调用打印函数print)
    
    return 0;
}