HDOJ HDU 2673 shǎ崽 OrOrOrOrz ACM 2673 IN HDU

本文提供了一个解决交替输出当前数组中最大值和最小值问题的高效算法,通过使用C语言实现,并提供了两种不同的实现方式:一种是使用`qsort`函数进行排序,另一种则是利用`map`数据结构。该问题适用于初学者理解和实践数组操作和排序算法。

//MiYu原创, 转帖请注明 : 转载自 ______________白白の屋

题目地址 :
         http://acm.hdu.edu.cn/showproblem.php?pid=2673

基本就是 当前最大值 和 最小值 的交替输出~ 
很简单的水题, 直接代码:

//MiYu原创, 转帖请注明 : 转载自 ______________白白の屋

#include 
< stdio.h >
#include 
< stdlib.h >
int  num[ 10001 ];
int  cmp (  const   void   * a,  const   void   * b )
{
    
return   * ( (  int   *  )a )  -    * ( (  int   *  )b );
}
int  main ()
{
    
int  N,i,j,k;
    
while  ( scanf (  " %d " , & N )  !=  EOF )
    {
            
for  ( i  =   0 ; i  !=  N;  ++  i )
            {
                  scanf ( 
" %d " ,num  +  i ); 
            } 
            qsort ( num , N ,
sizeof  ( int ), cmp ); 
            i 
=  N  -   1 , j  =   0 ;
            
for  ( k  =   0 ; k  !=  N;  ++  k )
            {
                  
if  ( k  %   2   ==   0  )
                  {  
                       printf ( 
! ?   " %d "  :  "  %d " ,num[i -- ] );
                  }
                  
else
                  {
                        printf ( 
"  %d " ,num[j ++ ] );
                  }
            }
            putchar (
' \n ' );
    }  
    
return   0
}

另外没事做用 map 做了一次, 时间上增加了 46 MS .
#include  < iostream >
#include 
< algorithm >
#include 
< map >  
using   namespace  std;
map 
<   int  , int   >  mp;
int  main ()
{
    
int  N,i,k;
    
while  ( scanf (  " %d " , & N )  !=  EOF )
    {
            
int  num;
            mp.clear();
            
for  ( i  =   0 ; i  !=  N;  ++  i )
            {
                  scanf ( 
" %d " , & num ); 
                  mp[ num ] 
=   1 ;
            } 
            map 
<   int  , int   > ::iterator beg  =  mp.begin();
            map 
<   int  , int   > ::iterator end  =  mp.end();
            end 
--
            
for  ( k  =   0 ; k  !=  N;  ++  k )
            {
                  
if  ( k  %   2   ==   0  )
                  {  
                       printf ( 
! ?   " %d "  :  "  %d " ,end -> first );
                       end 
-- ;

                  }
                  
else
                  {
                        printf ( 
"  %d " ,beg -> first );
                        beg 
++ ;
                  }
            }
            putchar (
' \n ' );
    }  
    
return   0
}

转载于:https://www.cnblogs.com/MiYu/archive/2010/08/18/1802413.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值