📜  C |数组|问题13(1)

📅  最后修改于: 2023-12-03 15:13:47.216000             🧑  作者: Mango

C语言 | 数组 | 问题13

问题描述

编写一个程序,输入一个由10个整数组成的数组,然后按照奇数、偶数交替的顺序重新排列,使得先出现奇数后出现偶数,奇偶数之间无所谓先后。

解决方案

这道题是一个比较典型的数组问题,需要从输入开始,读取一个长度为10的整数数组,然后重新排列这个数组,让奇偶数交替出现。下面是C语言的解决方案。

#include <stdio.h>

int main()
{
    // 读取输入的数组
    int a[10];
    printf("请输入10个整数:");
    for (int i = 0; i < 10; i++)
    {
        scanf("%d", &a[i]);
    }

    // 对数组重新排列
    for (int i = 0; i < 10; i++)
    {
        // 如果是奇数,并且当前位置是偶数
        if (a[i] % 2 != 0 && i % 2 == 0)
        {
            // 从下一个偶数位置开始查找
            for (int j = i + 1; j < 10; j += 2)
            {
                // 如果下一个位置是偶数,交换
                if (a[j] % 2 == 0)
                {
                    int temp = a[i];
                    a[i] = a[j];
                    a[j] = temp;
                    break;
                }
            }
        }
        // 如果是偶数,并且当前位置是奇数
        if (a[i] % 2 == 0 && i % 2 != 0)
        {
            // 从下一个奇数位置开始查找
            for (int j = i + 1; j < 10; j += 2)
            {
                // 如果下一个位置是奇数,交换
                if (a[j] % 2 != 0)
                {
                    int temp = a[i];
                    a[i] = a[j];
                    a[j] = temp;
                    break;
                }
            }
        }
    }

    // 输出数组
    printf("重新排列后的数组为:");
    for (int i = 0; i < 10; i++)
    {
        printf("%d ", a[i]);
    }
    printf("\n");

    return 0;
}
解决思路

首先,我们需要读入一个长度为10的整数数组,这里我们采用for循环和scanf函数。然后,我们对这个数组进行重新排列。具体的排列方法如下:

  1. 对于奇数,我们需要找出下一个偶数位置,如果下一个位置是偶数,我们就将这两个数交换。如果下一个位置还是奇数,则继续向下查找,直到找到偶数为止。

  2. 对于偶数,我们需要找出下一个奇数位置,如果下一个位置是奇数,我们就将这两个数交换。如果下一个位置还是偶数,则继续向下查找,直到找到奇数为止。

  3. 排列完成后,我们通过for循环和printf函数输出排列后的数组即可。

总结

这是一道比较典型的数组问题,需要对数组进行重新排列。需要注意,在进行交换操作时,我们只需要将相邻的奇偶数进行交换即可,不需要考虑其它情况。同时,在查找下一个位置时,我们可以利用i%2==0和i%2!=0来判断当前位置是奇数还是偶数,从而找到下一个合适的位置。