求助:用perl如何实现数组元素的组合
本帖最后由 流星北 于 2010-12-16 15:40 编辑假如:有一个10个元素的数组@num=(1,2,3,4,5,6,7,8,9,10),我想要得到这个数组所有可能的组合,如何实现,请高手赐代码!
具体如:
元素个数为1的所有组合是,(1),(2),(3).....(10),即每一个元素为一个组合
元素个数为2的所有组合为,(1,2),(1,3),(1,4).....,(1,10),(2,3),(2,4).......(2,10),.........(8,9),(8,10),(9,10)
元素个数为3的所有组合为,(1,2,3),(1,2,4).....(1,2,10),(1,3,4).....(1,3,10),.......(8,9,10)
.
.
.
元素个数为10的组合数为,(1,2,3,4,5,6,7,8,9,10)
请高手解答! #!/usr/bin/perl -w
use strict;
use warnings;
my @array = (1..9,'a');
my %hash;
main(@ARGV);
sub main{
my $size = 6;
foreach(@array){
check($_,$size);
}
foreach(sort keys %hash){
print $_."\n";
}
}
sub check{
my $value = shift || "";
my $size = shift;
my @tmpList;
foreach(@array){
if($value !~ /$_/){#这个正则有些问题,0的时候竟然永远是真,所以用a代替
push(@tmpList,$_);
}
}
foreach(@tmpList){
my $tmpValue = "$value"."$_";
if(length($tmpValue) == $size){
$hash{$tmpValue} = '';
next;
}
elsif(length($tmpValue) > $size){
return;
}
&check($tmpValue,$size);
}
}
将开始的size换成你要设置的. 本帖最后由 流星北 于 2010-12-16 20:03 编辑
回复 2# phoenix_perl
大哥你的代码实现了这个功能,但我希望你能帮我在我这个类型的数据上实现类似的功能。
BCL2 0.999
BCL2L1 0.999
CYCS 0.999
TP53 0.999
BBC3 0.996
BCL2L11 0.996
XRCC6 0.995
MAPK8 0.995
SH3GLB1 0.993
CASP3 0.991
TP53BP2 0.99
BID 0.988
我要 求前面列所有可能组合的分数的和
如:当n=1时,是对应分数本身,(BCL2对应的分数为0.999),...(FOXO3A对应的分数为0.81)
当n=2时,求所有可能的两个元素组合的分数的和,(BCL2和BCL2L1对应的分数是0.999+0.999)......(TP53BP2,BID对应的分数是0.99+0.988)
.
.
.
当n=数组元素个数, 分数为所有分数的和
页:
[1]