题目意思是给出一些数字,互不相同,给出一个序列,使相邻的数字之差的绝对值都不相同。如3,4,5三个数字,可以排列成3,5,4,前两个数字之差为2,后两个为1,都不相同,符合条件;而不能是3,4,5,因为前两个数之差为1,后两个为1,不符合条件。
具体做法为先排序,然后从首选一个,尾选一个,直到选完。
以下是我的代码:
#include<stdio.h>
void qsort(long a[],long begin,long end)


{
long i=begin,j=end,mid=a[(begin+end)/2],t;

do
{
while(a[i]<mid) i++;
while(a[j]>mid) j--;
if(i<=j)

{
t=a[i];a[i]=a[j];a[j]=t;
i++;j--;
}
}while(i<=j);
if(i<end) qsort(a,i,end);
if(j>begin) qsort(a,begin,j);
}
int main()


{
FILE *fin,*fout;
long t,n,i,j,k,a[10001];
fin=fopen("soldiers.in","r");
fout=fopen("soldiers.out","w");
fscanf(fin,"%ld",&t);
for(k=1;k<=t;k++)

{
fscanf(fin,"%ld",&n);
for(i=1;i<=n;i++)
fscanf(fin,"%ld",&a[i]);
qsort(a,1,n);
i=1;j=n;
while(j>i)

{
fprintf(fout,"%ld ",a[i]);
fprintf(fout,"%ld ",a[j]);
i++;j--;
}
if(i==j)
fprintf(fout,"%ld",a[i]);
fprintf(fout,"\n");
}
fclose(fin);
fclose(fout);
return 0;
}
posted on 2010-01-06 19:40
lee1r 阅读(307)
评论(0) 编辑 收藏 引用 所属分类:
题目分类:基础/模拟