读书人

[d]求perl 中位数函数解决方法

发布时间: 2013-01-23 10:44:49 作者: rapoo

[d]求perl 中位数函数
本帖最后由 fibbery 于 2012-09-29 10:03:49 编辑 RT

输入@list数组,输出$mid

ths.


-------------------
Double行动:
原帖分数:20
帖子加分:20
[解决办法]

#! /usr/bin/perl -w
use strict;
use 5.010;

sub mid
{
my @list = sort @_;
my $count = @list;
if( $count == 0 )
{
return 0;
die "怎么办?";
}
return $list[($count-1)/2];
}

say mid( 3, 9, 8 );
say mid( 3, 7, -5, -11 );
say mid( -5 );
say mid();

[解决办法]
#! /usr/bin/perl -w
use strict;

sub mid
{
my @list = sort @_;
my $count = @list;
if( $count == 0 )
{
return undef;
}
return $list[int(($count-1)/2)];
}


[解决办法]

sub mid{
my @list = sort{$a<=>$b} @_;
my $count = @list;
if( $count == 0 )
{
return undef;
}
if(($count%2)==1){
return $list[int(($count-1)/2)];
}
elsif(($count%2)==0){
return ($list[int(($count-1)/2)]+$list[int(($count)/2)])/2;
}
}

楼上二位答案甚好,但有两处需要注意:
1、sort排序是按ascii排序的,不是按照数字大小排序的。
2、中位数的定义:http://baike.baidu.com/view/170892.htm 如果数组个数是偶数,应该取中间两个的平均值。

供参考。谢谢!

读书人网 >perl python

热点推荐