求助:用perl如何实现数组元素的组合

发布于 2022-09-06 17:11:10 字数 499 浏览 10 评论 2

本帖最后由 流星北 于 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)

请高手解答!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

究竟谁懂我的在乎 2022-09-11 23:29:53

本帖最后由 流星北 于 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=数组元素个数, 分数为所有分数的和

¢好甜 2022-09-11 01:58:06
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use warnings;
  4. my @array = (1..9,'a');
  5. my %hash;
  6. main(@ARGV);
  7. sub main{
  8.         my $size = 6;
  9.         foreach(@array){
  10.                 check($_,$size);
  11.         }
  12.         foreach(sort keys %hash){
  13.                 print $_."n";
  14.         }
  15. }
  16. sub check{
  17.         my $value = shift || "";
  18.         my $size = shift;
  19.         my @tmpList;
  20.        
  21.         foreach(@array){
  22.                 if($value !~ /$_/){#这个正则有些问题,0的时候竟然永远是真,所以用a代替
  23.                         push(@tmpList,$_);
  24.                 }
  25.         }
  26.        
  27.         foreach(@tmpList){
  28.                 my $tmpValue = "$value"."$_";
  29.                
  30.                
  31.                 if(length($tmpValue) == $size){
  32.                         $hash{$tmpValue} = '';
  33.                         next;       
  34.                 }
  35.                 elsif(length($tmpValue) > $size){
  36.                         return;
  37.                 }
  38.                 &check($tmpValue,$size);
  39.         }
  40. }

复制代码将开始的size换成你要设置的.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文