Edit:
Toliko... Svakako ne najelegantnije rešenje, ali jasno pokazuje da se binarna pretraga mogla koristiti sa povratnim porukama koje su učesnici dobijali.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <Windows.h>
int main(int argc, char** argv) {
int Values[65536];
int MinSingleValue = -1;
int UpperBound = 65535;
int LowerBound = 0;
for (int i = 0; i < 65536; i++) {
Values[i] = 0;
}
srand(time(NULL));
for (int i = 0; i < 65536; i++) {
Values[i] = rand() % 1000;
//printf("Values[%5d] = %5d\r\n", i, Values[i]);
}
for (int i = 0; i < 65536; i++) {
if (Values[i] == 1) {
MinSingleValue = i;
break;
}
}
if (MinSingleValue == -1) {
printf("U ovom ciklusu nema jedinstvene ponude...");
return (EXIT_SUCCESS);
} else {
printf("Jedinstvena i najniza ponuda je %5d\r\n", MinSingleValue);
}
/* Pretraga */
while (1) {
int Guess = (UpperBound + LowerBound) / 2;
printf("Guess = %5d, Values[%5d] = %d: ", Guess, Guess, Values[Guess]);
if ((Values[Guess] > 1) && (Guess > MinSingleValue)) {
printf("Ponuda nije ni jedinstvena ni najniza\r\n");
UpperBound = Guess;
}
else
if ((Values[Guess] == 1) && (Guess > MinSingleValue)) {
printf("Ponuda je jedinstvena, ali nije najniza\r\n");
UpperBound = Guess;
}
else
if ((Values[Guess] > 1) && (Guess < MinSingleValue)) {
printf("Ponuda nije jedinstvena\r\n");
LowerBound = Guess;
} else
if (Guess == MinSingleValue) {
printf("Ponuda je jedinstvena i najniza\r\n");
break;
}
Sleep(1000);
}
return (EXIT_SUCCESS);
}
[Ovu poruku je menjao abitbp6 dana 23.03.2010. u 16:51 GMT+1]