求助perl 全排列问题

2025-04-17 16:28:34
推荐回答(2个)
回答1:

看下这个是不是想要的,将大小关系转换成数字
@m=(4,2,8,5,7,3,6);
$n = 1;
for (0..$#m-1)
{
if ($m[$_] > $m[$_+1])
{
}
else
{
$n += 1<<($#m-1-$_);
}
}
print "$n\n";
$n--;
for (0..$#m-1)
{
unshift @d, ($n & 1)?'<':'>';
$n >>= 1;
}
@r = map{ $d[$_] . $m[$_+1]} 0..$#d;

print "$m[0]@r\n";

回答2:

#!/usr/bin/perl
use 5.016;
while () {
    my ( $g1, $g2, $g3 ) = split;
    my $r = $g1 > $g2 ? $g2 > $g3 ? 1 : 2 : $g2 > $g3 ? 3 : 4;
    say "r = $r\t[$g1, $g2, $g3]";
}

__DATA__
3 2 1
5 2 3
1 3 2
1 2 3
r = 1   [3, 2, 1]
r = 2   [5, 2, 3]
r = 3   [1, 3, 2]
r = 4   [1, 2, 3]