1

我正在尝试解决一个问题

拉胡尔正在玩一个非常有趣的游戏。他有 N 个圆盘(每个圆盘的半径相等)。每个磁盘都有一个从 1 到 N 的不同数字与之关联。磁盘在一个堆中一个接一个地放置。

Rahul 想要按从上到下的递增顺序对这堆磁盘进行排序。但是他有一个非常非常特殊的方法来做到这一点。一步他只能从一堆磁盘中选择一个,他只能把它放在最上面。

Rahul 想要以最少的可能步骤对他的一堆磁盘进行排序。所以帮助拉胡尔这样做。因此,不必显示实际步骤,只需回答对堆进行排序的最小可能步骤数,以便 Rahul 可以检查他的工作是对还是错。

我正在写的代码是

sub get_order { 
    my (@input1)= @_; 
    my @input2 = @input1;

    my $count = 0;
    sub recursive {
        my $max = 0;
        last if ( $#input2 == -1 ) ;
        foreach ( 0 .. $#input2) {
            $max = $max > $input2[$_] ? $max : $input2[$_];
            print " maximum is $max \n";
        }
        if ( $max == $input2[$max-1] ) { 
            $abc = 0;
        } else {
            $count++;
            #push @input2, $max;
        }
        # deleting that particular array index from the array
        my %hash = map { 
            $_ => "1" 
        } @input2;
        delete $hash{$max};
        print %hash;
        print "\n";
        @input2 = keys %hash;
        print "***@input2 \n";
        &recursive();
    }
    &recursive();
    print "value is $count \n"; 
    return $count;

 }

get_order(3,1,2);

我在 test.txt 第 8 行的循环块之外收到错误不能“持续”。

4

2 回答 2

5

在 , , , , 或裸块之外forforeachwhile不能until使用last,nextredo

相反,您可以return从函数中,

return if ( $#input2 == -1 ) ;
于 2013-09-27T13:56:28.370 回答
3

部分代码是

sub recursive {
    my $max = 0;
    last if ( $#input2 == -1 ) ;
    foreach ( 0 .. $#input2) {

在这些行last中不会发生for循环。因此出现错误消息。

last用于退出循环。如果您想从 a 中退出,请sub使用return.

于 2013-09-27T13:56:15.293 回答