|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
【问题描述】
输入元素个数及数组中的各元素,将其中奇数的值放到数组前面,将偶数放到数组后面。
说明:请只提供需要补全的代码部分,不需要提供完整程序。可根据需要定义其他变量。
【输入形式】
【输出形式】
【样例输入】
7
6 5 8 7 3 2 1
【样例输出】
5 7 3 1 6 8 2
#include <stdio.h>
int main()
{
int a[10], n, i, j, temp;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0,j=n-1;i<j;)
{
if(a[i]%2==0&&a[j]%2==1)
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
i++;
j--;
} else if(a[i]%2==1&&a[j]%2==1)
{
i++;
} else if(a[i]%2==0&&a[j]%2==0)
{
j--;
} else
{
i++;
}
}
for(i = 0; i<n; i++)
printf("%d ", a[i]);
return 0;
}
感觉没有问题啊
这个代码是将奇数和偶数分开,但并未保证奇数和偶数在数组中的相对顺序与原始顺序相同。所以这个代码不能得到题目中给出的样例输出。如果希望保留原始顺序,可以使用类似插入排序的方法来处理。以下是修正后的代码:
- #include <stdio.h>
- int main()
- {
- int a[10], n, i, j, temp;
- scanf("%d", &n);
- for (i = 0; i < n; i++)
- scanf("%d", &a[i]);
- for (i = 0; i < n; i++) {
- if (a[i] % 2 == 1) {
- temp = a[i];
- j = i - 1;
- while (j >= 0 && a[j] % 2 == 0) {
- a[j + 1] = a[j];
- j--;
- }
- a[j + 1] = temp;
- }
- }
- for (i = 0; i < n; i++)
- printf("%d ", a[i]);
- return 0;
- }
复制代码
这个修正后的代码将保持奇数和偶数在数组中的相对顺序与原始顺序相同。
|
|