任何有经验的人都想帮我解决我的代码问题? 它应该猜测你在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);
}
答案 0 :(得分:1)
首先学会使用调试器它将帮助你解决将来的许多问题。对于这种情况,我想这是因为一个小错字low + high / 2
而不是(low + high) / 2
。干杯: - )
答案 1 :(得分:0)
最好从头开始编写自己的二进制排序,以了解它的工作方式。
但要正确地执行此操作,请遵循以下规则。
首先,只使用&lt; (小于)运营商,这是传统的。每次通过循环时,您应该只进行一次比较。不要试图提前返回 - 比较的额外成本是不值得的。如果你不能设置低到中等+1,那么它必须是“mid”。因为两次向下划分,低中和高将最终收敛于答案,或者没有答案,他们将指向插入点。