需要帮助使二进制搜索程序正常工作

时间:2017-02-06 13:35:27

标签: c++

任何有经验的人都想帮我解决我的代码问题? 它应该猜测你在7次尝试中输入的1到100之间的数字,但是当“num”高于“mid”时,它会陷入循环中

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

2 个答案:

答案 0 :(得分:1)

首先学会使用调试器它将帮助你解决将来的许多问题。对于这种情况,我想这是因为一个小错字low + high / 2而不是(low + high) / 2。干杯: - )

答案 1 :(得分:0)

最好从头开始编写自己的二进制排序,以了解它的工作方式。

但要正确地执行此操作,请遵循以下规则。

首先,只使用&lt; (小于)运营商,这是传统的。每次通过循环时,您应该只进行一次比较。不要试图提前返回 - 比较的额外成本是不值得的。如果你不能设置低到中等+1,那么它必须是“mid”。因为两次向下划分,低中和高将最终收敛于答案,或者没有答案,他们将指向插入点。