1

問題を解決しようとしています

Rahul は非常に興味深いゲームをプレイしています。彼は N 個のディスク (それぞれが等しい半径) を持っています。すべてのディスクには、1 から N までの個別の番号が関連付けられています。ディスクは、1 つの山に重ねて配置されます。

Rahul は、このディスクの山を上から下に昇順で並べ替えたいと考えています。しかし、彼はこれを行うための非常に特別な方法を持っています。1 つのステップで、彼は山からディスクを 1 つだけ選択し、それを一番上にのみ置くことができます。

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);

Can't "last" outside a loop block at test.txt 行 8 というエラーが表示されます。

4

2 に答える 2

5

forforeachwhileuntil、またはネイキッド ブロックの外では、 lastnextまたはredo

代わりに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 に答える