給定N個不同的整數組成的集合,請你構造出一個升降序列,使得該升降序列的字典序最小。
對於有N個元素的兩個整數序列A和B,如果存在下標k,使得Ak<Bk,並且對於所有1≤i<k≤N,都有Ai=Bi,那麼稱序列A的字典序小於序列B;如果存在下標k,使得Ak>Bk,並且對於所有1≤i<k≤N,都有Ai=Bi,那麼稱序列A的字典序大於序列B;如果不存在下標k,使得Ak≠Bk(1≤k≤N),那麼稱序列A的字典序等於序列B。
Input
2 3 1 2 3 5 100 350 200 101 401Sample Output
1 3 2
100 200 101 401 350
ps:雖然比較水,但是也能考察數組的基本功是否夠用
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string.h>
using namespace std;
int a[50010];
int b[50010];
int N;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&N);
for (int i=1; i<=N; i++)
scanf("%d",&a[i]);
sort(a+1,a+1+N);
memset(b,0,sizeof(b));
b[1]=a[1];
b[3]=a[2];
b[2]=a[3];
for (int i=4; i<=N;i+=2)
{
b[i]=a[i+1];
b[i+1]=a[i];
}
for (int i=1; i<=N-1; i++)
printf("%d ",b[i]);
printf("%d\n",b[N]);
}
return 0;
}