題目意思是給出一些數(shù)字,互不相同,給出一個序列,使相鄰的數(shù)字之差的絕對值都不相同。如3,4,5三個數(shù)字,可以排列成3,5,4,前兩個數(shù)字之差為2,后兩個為1,都不相同,符合條件;而不能是3,4,5,因?yàn)榍皟蓚€數(shù)之差為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 閱讀(312)
評論(0) 編輯 收藏 引用 所屬分類:
題目分類:基礎(chǔ)/模擬