📅  最后修改于: 2023-12-03 15:13:47.216000             🧑  作者: Mango
编写一个程序,输入一个由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函数。然后,我们对这个数组进行重新排列。具体的排列方法如下:
对于奇数,我们需要找出下一个偶数位置,如果下一个位置是偶数,我们就将这两个数交换。如果下一个位置还是奇数,则继续向下查找,直到找到偶数为止。
对于偶数,我们需要找出下一个奇数位置,如果下一个位置是奇数,我们就将这两个数交换。如果下一个位置还是偶数,则继续向下查找,直到找到奇数为止。
排列完成后,我们通过for循环和printf函数输出排列后的数组即可。
这是一道比较典型的数组问题,需要对数组进行重新排列。需要注意,在进行交换操作时,我们只需要将相邻的奇偶数进行交换即可,不需要考虑其它情况。同时,在查找下一个位置时,我们可以利用i%2==0和i%2!=0来判断当前位置是奇数还是偶数,从而找到下一个合适的位置。