2016-05-07 10 views
0

私はクロックポリシーアルゴリズムに似たものを構築しようとしています。それは何が起こっているのか、それはそれを探して見つからなかった場合は、その後
for(i=ptr;i<50;i++)
- :
は、今私は、ポインタから始まり、すなわち探しているものを見つけることができませんでした場合は、それで終わるの完璧な時計に私のループを必要としますループからループ
(i = 0 ; i < ptr; i++)
ループを1つのループにする方法はありますか?あるポインタから始まり、どこから開始するループを作ることができますか?

+0

いいえ、私はPTRを<までiは0及びループに等しくする必要が次回。 for(i = 0; i brokleyscoding

答えて

0

私はあなたの質問から理解していますが、最初に特定のサブレンジを確認し、それが条件を満たさない場合は、基本的にはレンジ全体をチェックしています。

これは1つのループ自体で実行できますが、ループロジックを少し変更するだけです。 の代わりにの値との値がになる場合は、より高い範囲から低い範囲に開始します。これは要件を自動的にカバーします。

for (int i = 50; i > 0; i--) 

よう

何かが仕事を行います。それは

  • for (i=ptr; i < 50; i++)
  • for (i=0 ; i < ptr; i++)
+0

私は特定のアルゴリズムに従っているので、ptrから始めて終了することが重要です。 – brokleyscoding

0

のようにさて、あなたは%を使用してハックのいくつかの種類を試すことができ、2つのループの有効性を結合します。

質問は、ptrを1回または2回ヒットしますか?

一度だけの場合は、次のようにしてください。

for (i = ptr + 1; i != ptr; i = (i + 1) % 50) 

あなたはループがPTRで正確に開始し、PTRで正確に終了したい場合は、それを処理するために、いくつかのオーバーフローフラグを維持する必要があると思います。

正直言って、2つのループを使う方が良いかもしれません。あなたが何をしようとしているのか、誤りが起こりにくい方がはっきりしています。

+0

まあ、特定のインデックスから配列をループしているようですが、そのインデックスから配列の終わりまでの範囲から探していたものが見つからなかった場合は、配列の先頭から開始しますインデックスに停止します。 – brokleyscoding

3

使用doループにおけるモジュラ算術:

i = ptr % 50; 
do{ 
    //body of loop 
    i = (i+1) % 50; 
} while(i != ptr); 
+0

'ptr'が'> = 50'ならば、ループ本体が実行されますが、これは間違っていると思います。 –

+1

@SouravGhosh私は整数モードをループしたいという質問を読んでいます50のループは、0から49までの範囲の指定された 'ptr 'で始まり、終わります。' i'は決してその範囲を離れることはありません。 –

+0

'ptr'が範囲内にあるとします。もしそうでなければ? 'for'はそれを処理しますが、' do..while'は処理しません。申し訳ありませんが、両方が同じであることに同意できません。 :) –

関連する問題