|
- use strict;
- my @num = (1, 2, 3, 4, 5, 6, 7, 8, 9);
- my @list = ();
- my $n=0;
- my $a1;
- my $a2;
- my $a3;
- my $a4;
- my $a5;
- my $a6;
- my $a7;
- my $a8;
- comb(\@list,\@num);
- sub comb {
- # list all the combination of a list
- my ($sel, $bag) = @_;
- if (@$bag == 1) {
- # $n++;
- # print $n." | ";
- # print @$sel, @$bag, "\n";
- $a1=@$sel[0]+@$sel[1]+@$sel[2];
- $a2=@$sel[3]+@$sel[4]+@$sel[5];
- $a3=@$sel[6]+@$sel[7]+@$bag[0];
- $a4=@$sel[0]+@$sel[3]+@$sel[6];
- $a5=@$sel[1]+@$sel[4]+@$sel[7];
- $a6=@$sel[2]+@$sel[5]+@$bag[0];
- $a7=@$sel[0]+@$sel[4]+@$bag[0];
- $a8=@$sel[2]+@$sel[4]+@$sel[6];
- if($a1==$a2){if($a2==$a3){if($a3==$a4){if($a4==$a5){if($a5==$a6){if($a6==$a7){if($a7==$a8){
- $n++;
- print "\t",@$sel[0],", ",@$sel[1],", ",@$sel[2],"\n";
- print $n,"\t",@$sel[3],", ",@$sel[4],", ",@$sel[5],"\n";
- print "\t",@$sel[6],", ",@$sel[7],", ",@$bag[0],"\n";
- print "---------------\n";
- }}}}}}}
- # print $a1,", ",$a2,", ",$a3;
- # print @$sel[0];
- # print @$sel[1];
- # print @$sel[2];
- # print @$sel[3];
- # print @$sel[4];
- # print @$sel[5];
- # print @$sel[6];
- # print @$sel[7];
- # print @$bag[0];
- # print "\n";
- return;
- }
- for (my $i = 0; $i < @$bag; $i++) {
- my @tail = @$bag;
- my @pre = (@$sel, splice(@tail, $i, 1));
- comb(\@pre, \@tail);
- }
- }
複製代碼
|
|