【发布时间】:2013-12-12 07:49:37
【问题描述】:
程序“随机”选择一组 8 个数字,然后用户必须尽可能多地猜测这些数字。但即使我在这个随机数数组中输入数字,binary_search 函数也不会在“随机”数字数组中找到那个确切的数字。我似乎在 binary_search 函数中找不到错误(至少我怀疑这就是问题所在)。我已经尝试过具有大数字和小数字的程序。谁能帮帮我?
#define SIZE 3
#define min 1
#define max 36
int random();
bool binary_search(int value, int values[], int n);
int main(void)
{
int numbers[SIZE];
for(int i = 0; i < SIZE; i++)
numbers[i] = random();
int score = 0;
int n[SIZE];
int number_user;
for(int i = 0; i < SIZE; i++)
{
//Type in a number
do
{
printf("Search number no.%d:\n> ", i + 1);
n[i] = GetInt();
//Wrong input number
if(n[i] < min || n[i] > max)
{
printf("\nNumber should be between %d - %d!!!\n\n", min , max);
}
}
while(n[i] < min || n[i] > max);
//THE PROBLEMATIC STUFF - START
number_user = n[i];
if (binary_search(number_user, numbers, SIZE))
{
printf("FOUND!!!\n");
score += 1;
}
else
{
printf("NOT IN THE LIST\n");
}
//PROBLEMATIC STUFF - FINISH
}
//scoring
printf("\n\n*******SCORE*******\n");
//print your numbers
for(int i = 0; i < SIZE; i++)
{
printf(" %d", n[i]);
if(i != SIZE - 1)
printf(",");
if(i == SIZE - 1)
printf(".\n");
}
//print right numbers
printf("\nRight numbers are:");
for(int i = 0; i < SIZE; i++)
{
printf(" %d", numbers[i]);
if(i != SIZE - 1)
printf(",");
if(i == SIZE - 1)
printf(".\n");
}
int result = score / SIZE * 100;
printf("Your score is: %d / %d , %d %%\n", score, SIZE, result);
return 0;
}
//PROBLEM START
bool binary_search(int value, int values[], int n)
{
int beginning = 0;
int ending = n - 1;
int middle;
while (ending >= beginning)
{
middle = (beginning + ending) / 2;
for(int i = 0; i < SIZE; i++)
{
//look at middle of list if (binary_search(n, numbers, SIZE))
if(values[middle] == value)
//if number found, return true
return true;
//else if middle higher, search left
else if(values[middle] > value)
ending = middle - 1;
//else if middle lower, search right
else if(values[middle] < value)
beginning = middle + 1;
}
}
return false;
}
//PROBLEM FINISH
int random()
{
int r = rand() % ((max - min + 1) + min);
return r;
}
【问题讨论】:
-
二分搜索中
for循环的意义何在? -
我认为有必要先排序才能搜索数字。
-
不,真的不是……