'임의로'8 개의 숫자 집합을 선택하면 사용자는 최대한 많은 숫자를 추측해야합니다. 그러나이 임의의 숫자 배열에서 숫자를 입력하더라도 binary_search 함수는 '임의의'숫자 배열에서 정확한 숫자를 찾지 못합니다. 내 binary_search 함수에서 실수를 발견 할 수없는 것 같습니다 (최소한 문제가있는 것 같아요). 나는 큰 숫자의 숫자와 작은 숫자로 프로그램을 시도했다. 누구든지 제발 도와 주실 수 있습니까?C의 이진 검색 기능
#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' 루프의 핵심은 무엇입니까? – kviiri
숫자를 검색하기 위해서는 이전까지 정렬해야한다고 생각합니다. – BLUEPIXY
아니요, 정말로 그렇지 않습니다 ... – kviiri