数组奇偶操作

时间: 1ms        内存:128M

描述:

给你一个有n个整数的序列,a1,a2,a3,….an(下标从1开始)。
现在进行下列操作,将下标为奇数的元素按照升序排列,下标为偶数的元素按照降序排列,然后输出。
比如,给你n=8,序列为 2 6 7 1 3 8 9 4。
则下标为奇数的元素有2 7 3 9,排序后为2 3 7 9。
下标为偶数的元素有6 1 8 4,排序后为8 6 4 1。
则输出为 2 8 3 6 7 4 9 1

输入:

输入数据包含多组。每一组测试数据的第一行为一个整数n(n<1000),表示序列的个数,第二行有以空格隔开的n个整数a1,a2,a3,…an。输入数据以n=0结束

输出:

按要求输出,每一个序列占一行,每两个元素之间用空格隔开(每一行最后不应包含空格)。

示例输入:

8
2 6 7 1 3 8 9 4
0

示例输出:

2 8 3 6 7 4 9 1

提示:

参考答案(内存最优[1120]):

#include<stdio.h>
#include <string.h>
int main()
{
	int n,i,j;
	// freopen("in.txt","r",stdin);
	// freopen("out.txt","w",stdout);
	while(scanf("%d",&n)!=EOF)
	{
		if(n==0)
			break;
		int b[1050],c[1050],a[1050]={0};
		b[0]=0,c[0]=0;
		for(i=1;i<=n;i++){
			scanf("%d",&a[i]);
			if(i%2==1)
				b[++b[0]]=a[i];
			else 
				c[++c[0]]=a[i];
		}
		int temp;
		for(i=1;i<=b[0];i++)
			for(j=i+1;j<=b[0];j++)
				if(b[i]>b[j]){
					temp=b[i];
					b[i]=b[j];
					b[j]=temp;
				}

		for(i=1;i<=c[0];i++)
			for(j=i+1;j<=c[0];j++)
				if(c[i]<c[j]){
					temp=c[i];
					c[i]=c[j];
					c[j]=temp;
				}

		b[0]=c[0]=0;
		for(i=1;i<=n;i++)
			if(i%2==1)
				a[i]=b[++b[0]];
			else 
				a[i]=c[++c[0]];
		for(i=1;i<n;i++)
			printf("%d ",a[i]);
		printf("%d\n",a[n]);
	}
	return 0;
}

参考答案(时间最优[3]):

#include<stdio.h>
int main()
{
    int n,i,j,m,min,max,t;
    while(scanf("%d",&n)!=EOF){
    if(n==0) break;
    int a[n+1];
    for(i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    for(i=1;i<=n;i=i+2)
    {
       min=i;
       {
           for(j=min+2;j<=n;j=j+2)
            if(a[min]>a[j])
           {
               min=j;
           }
       }
       if(min!=i)
       {
           t=a[i];
           a[i]=a[min];
           a[min]=t;
       }
    }
    for(i=2;i<=n;i=i+2)
    {
       max=i;
       {
           for(j=max+2;j<=n;j=j+2)
            if(a[max]<a[j])
           {
               max=j;
           }
       }
       if(max!=i)
       {
           t=a[i];
           a[i]=a[max];
           a[max]=t;
       }
    }
    for(i=1;i<=n;i++)
        printf("%d ",a[i]);
    }
    return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。