2017-02-20 4 views
0

右側のすべての数字より大きいすべての数字をテーブルから出力するアルゴリズムを構築する必要があります。例A = {93,24,57,29,41}。 93,57,41を印刷する必要があります。私がしたことがここにあります:テーブル内のすべての数字を右側のすべての数字よりも大きい数字で印刷する

Algorithm leader(A[0:n-1],n) 

k=0; 
for i=0 to n-2 do 
{ for j=i+1 to n-1 do 
{ if A[i]>A[j] 
    then {k=k+1; 
      B[k]=A[i];}} 
k=k+1 
B[k]=A[n-1] //Adds the last number of the table. 
return B; 
+0

右から左に歩くとどうなりますか? – MBo

+0

@MBoでもそうかもしれませんが、これが正しいかどうかを知りたい場合は – Albanian

+1

いいえ、数字が右側の数字のANYより大きい場合は、数字を結果配列に入れます。カウントされた数字がチェックされた数字(n-1-i)と一致する場合は、内部の反復(j)の後でのみA [i]より小さい数を結果配列(B)にプッシュする必要があります。 –

答えて

-1

私は、あなたが会った最大の数字を保存することをお勧めします。

これより大きい場合は、現在の番号を最大値で確認し、印刷して最大のものにする必要があります。そうでない場合は、右の数字のすべてよりも大きくはありません。 :)

編集

ありませんあなたのソリューションが動作しません。あなたの例では、結果は93,93,93,93,57,57,41になります。なぜなら、数A [i]がA [j]よりも大きいかどうかを確認して、それを何度も繰り返して追加するからです。あなたが好きな何かをすることによって、これを防ぐことができます。

for i=0 to n-2 do{ 
    for j=i+1 to n-1 do{ 
     if A[i]<A[j] then { 
      <boolean flag = false> 
     } 
    } 
if <boolean flag> then { 
    k=k+1; 
    B[k]=A[i]; 
    } 
} 

k=k+1 
B[k]=A[n-1] 

私は>から<に小切手の符号を変更しました。また、あなたの最初のforループに '}'がありません。

+0

私は完全にあなたが言ったことを理解し、それはあなたが説明したようにそれを行う方が効率的だろうが、私はそれが正しいかどうかを書いたこのアイデアを知る必要がある? – Albanian

+0

@Albanianここでは、結果となるものが実行されるかどうかについて説明しました。それがうまくいくかどうかを知る必要がある場合にのみ好奇心から、それを実行しない理由は何ですか? – Wald

0

あなたの実装は間違っています。あなたのアプローチを適切に実装するには、現在の左アイテムが他のすべてのアイテムよりも右側にあるかどうかをチェックする必要があります。可能な擬似コード:

for i=0 to n-1 do 
    j = i + 1 
    while (j < n) and (A[j] < A[i]) 
    j++ 
    if j == n //we did not meet greater element 
     output A[i] 

    //possible optimization - jump to the next candidate 
    //else 
    // i = j 
関連する問題