2017-02-06 11 views
-1

経験が豊富な人は誰でも私のコードを手伝いたいですか? あなたが7トライの下で入力して1〜100の数を推測することになったが、「numは」の高い「半ば」よりを取得するとき、それはのループでスタックを取得していますすべてのバイナリ検索プログラムの作成を手助けする必要があります

#include <iostream> 
#include <time.h> 

int low = 0; 
int high = 99; 
int mid = low + high/2; 
int num[100]; 
int x = 0; 
int in_num; 
int tries; 

int main(){ 
    //Counts all the number in num[] up to 100 
    while(x != 100){ 
     num[x] = x + 1; 
     x += 1; 
    } 

    std::cout << "Please enter a number between 1 and 100." << std::endl; 
    std::cin >> in_num; 
    in_num -= 1; 


    while(mid != num[in_num]){ 
     if(mid > num[in_num]){ 
      tries += 1; 
      high = mid - 1; 
     } 
     if(mid < num[in_num]){ 
      tries += 1; 
      low = mid + 1; 
     } 
     mid = low + high/2; 
     std::cout << mid << std::endl; 
    } 
    if(mid = num[in_num]){ 
     std::cout << "Yay i did it with: " << tries << " tries" << std::endl; 
    } 

    return(0); 
} 
+5

デバッガを使用してコードをステップ実行する方法を学ぶ必要があるようです。良いデバッガを使用すると、プログラムを1行ずつ実行し、どこからずれているかを確認することができます。これはプログラミングをする場合に不可欠なツールです。詳しい読書:** [小さなプログラムをデバッグする方法](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver

+0

私は答えをチェックアウトしますappriciate。 – Macronical

+0

また、入力が1から100の間であることを検証する必要があります。ユーザーがこの範囲外の値を入力した場合、コードには未定義の動作があります。 – drescherjm

答えて

1

まず、デバッガにそれを使用することを学びます将来あなたの多くの問題を解決するのに役立ちます。この場合、私はそれが(low + high)/2の代わりに小さなタイプのlow + high/2のためだと思います。乾杯:-)

0

動作方法を理解するために、独自のバイナリソートを最初から書き込むことは良いことです。

ただし、正しく行うには、次の規則に従ってください。

まず、<(小なり)演算子のみを使用します。これは従来のものです。ループを通過するたびに比較を1つだけ行う必要があります。早期復帰を試みないでください - 比較の余分な費用はそれに値するものではありません。次のように+1を低く設定できない場合は、「中」にする必要があります。 2ラウンド分の除算が行われるため、最終的には中低値と高値が収束するか、答えが得られず、挿入位置を指すことになります。

関連する問題