PROBLEM
Et nyt rumforsøg involverer N objekter, nummereret fra 1 til N, hvor N er ulige. Hvert af objekterne har en entydig, men ukendt styrke givet ved et naturligt tal Y, hvor 1 £ Y £ N. Objektet med median-styrken, er det objekt X, hvor der er lige så mange objekter med mindre styrke end X, som der er objekter med større styrke end X.
Skriv et program der finder objektet med median-styrken.
Uheldigvis kan objekternes styrke kun sammenlignes ved hjælp af et apparat som – givet tre forskellige objekter – fortæller hvilket der besidder median-styrken blandt disse tre objekter.
Bibliotek til interaktion
Der er givet et bibliotek med navnet device, som indeholder tre operationer:
MEDIAN.OUT og MEDIAN.LOG.
MEDIAN.OUT består af to linjer:
INSTRUKTION TIL PASCAL-PROGRAMMØRER
Medtag følgende i din kildetekst:
uses device;
INSTRUKTION TIL C/C++ PROGRAMMØRER
Medtag følgende i din kildetekst:
#include "device.h"
Opret projektet MEDIAN.PRJ og tilføj filerne MEDIAN.C (MEDIAN.CPP) og DEVICE.OBJ til projektet.
HVORDAN DU KAN TESTE DIT PROGRAM
Du kan eksperimentere med biblioteket device ved at oprette en tekstfil DEVICE.IN, der skal bestå af to linjer. Den første indeholder heltallet N, der angiver antallet af objekter. Den anden linje skal indeholde heltallene fra 1 til N i en eller anden rækkefølge til beskrivelse af objekternes styrke, så det i’te heltal er styrken på det i’te objekt.
EKSEMPEL
DEVICE.IN:
5
2 5 4 3 1
Filen DEVICE.IN
ovenfor beskriver inddata med 5 objekter, hvis styrke er som følger:
Objekt |
|
|
|
|
|
Styrke |
|
|
|
|
|
Nedenstående er en mulig reaktiv sekvens af kald til biblioteket:
function Med3(x, y, z: integer): integer;
procedure Answer(m: integer);
int Med3(int x, int y, int z);
void Answer(int m);