第1个回答 2019-12-07
#include<stdio.h>
int main() {
int a[10] = {3,2,1,4,6,9,8,5,12,11};
int temp;
int index = 0;
while(a[index]%2 ==0 && index<10) { //确定数组中第一个奇数的下标
index++;
}
for(int i=index+1;i<10;i++) {
if(a[i]%2 == 0) { //确定偶数的位置后与奇数换位置
temp = a[i];
a[i] = a[index];
a[index] = temp;
while(a[index]%2 ==0 && index <10) { //同时应该要找到下一个奇数的下标
index++;
}
}
}
for(int i=0;i<10;i++) { //打印输出
printf("%d\t",a[i]);
}
}
第2个回答 2008-04-20
我是PcrazyC的小号,你把分给他,谢谢合作,我更改次数好像过多了,不能改了,郁闷
不好意思,好像是没有改变,我在处理判断偶数的时候没有考虑到优先级的问题,所以出错了,现在的没问题了,你自己可以看看
算法:
从第一个数开始,如果是偶数,与最后一个数交换,同时将最后一个数排除出去,不用处理了;如果是奇数的话,就继续下一次循环....这样进行下去,直到这个数是应该处理的数的最后一个为止
#include <stdio.h>
#define SIZE 10
void sort(int a[],int n)
{
int i,len,temp;
len=n-1;
for(i=0;i<len;)
{
if((a[i]&0x01)==0) //判断是否为偶数
{
temp=a[len];
a[len]=a[i];
a[i]=temp;
len--;
}
else
i++;
}
}
int main()
{
int a[SIZE]={0},i;
for(i=0;i<SIZE;i++)
scanf("%d",&a[i]);
sort(a,SIZE);
for(i=0;i<SIZE;i++)
printf("%-5d",a[i]);
printf("\n");
return 0;
}
第3个回答 2008-04-14
#include <stdio.h>
void move(int a[], int n)
{
int i=0,j=n-1;
while(i<j)
{
if(i<j && a[i]%2!=0) ++i;
while(i<j && a[j]%2==0) --j;
if(i<j)
{
a[i] = a[i]+a[j];
a[j] = a[i]-a[j];
a[i] = a[i]-a[j];
}
}
}
void main()
{
int a[3][11] = {{0},{23,34,12,45,34,56,767,545,345,4,547},{0}};
int i;
printf("Befroe moving: ");
for(i=0; i<11; ++i)
{
printf("%d ", a[1][i]);
}
move(a[1], 11);
printf("\n");
printf("After moving: ");
for(i=0; i<11; ++i)
{
printf("%d ", a[1][i]);
}
printf("\n");
}
第4个回答 2008-04-14
int p =0;
int tem;
fro(int i=0;i<n;i++)//n为数组的长度
{
if( 。。。)//判断是否为偶数
{
if(i>p)
{
tem=a[i];
a[i]=a[p];
a[p]=tem;
}
p++;
}
}
要自己在改改