心如止水
Je n'ai pas le temps
posts - 400,comments - 130,trackbacks - 0

题目意思是给出一些数字,互不相同,给出一个序列,使相邻的数字之差的绝对值都不相同。如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 阅读(302) 评论(0)  编辑 收藏 引用 所属分类: 题目分类:基础/模拟

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理