- (a)
final String TERMINATOR = "QUIT";
final int MAX_RUNNER = 1000;
Runner[] runners = new Runner[MAX_RUNNER];
int rnum = 0;
boolean notdone = true;
while (notdone)
{
String name = stdin.readline();
if (name.equals(TERMINATOR))
notdone = false;
else
{
int time = Integer.parseInt(stdin.readLine());
runners[rnum] = new Runner(name, time);
rnum++;
}
}
- (b)
// first find fastest runner
int fastest = 1000000; // a big number
for (int i = 0; i < rnum; i++)
{
if (runners[i].time <= fastest)
fastest = runners[i].time;
}
// print out all runner's names with time <= fastest + 10%
float close = fastest + (fastest*0.10);
// go through the runners
for (int i = 0; i < rnum; i++)
{
if (runners[i].time <= close)
System.out.println(runners[i].name);
}
- (c)
void printFastest(Runner[] runners, int rnum)
{
final float fraction = 0.10;
int fastnum = (int)rnum*fraction;
Runner[] fastest = new Runner[fastnum];
int current = 0;
// read in first five runners as the fastest so far
for (int i = 0; i < fastnum; i++)
{
fastest[i] = runners[i];
current++;
}
// loop to read in the rest of the runners
for (int i = current; i <= rnum; i++)
{
Runner nextrunner = runners[i];
// 1) find the slowest runner in "fastest"
// 2) if nextrunner is faster than than the slowest runner in fastest:
// - shift all runners in "fastest" after "slowest" up by one
// (effectively removing "slowest")
// - insert "nextrunner" at the end of "fastest"
int slowest = 0;
// loop to find the slowest runner in array "fastest"
for (int j = 1; j < fastnum; j++)
{
if (fastest[j].time >= fastest[slowest].time)
slowest = j;
}
if (nextrunner.time <= fastest[slowest].time)
{
// shift the remaining runners in fastest up
// (thereby removing slowest)
for (int k = slowest+1; k < fastnum; k++)
{
fastest[k-1] = fastest[k];
}
// insert the current runner in the last position
fastest[fastnum-1] = nextrunner;
} // end if (nextrunner.time <= fastest[slowest].time)
} // end for (int i = current; i <= rnum; i++)
// print out all the runners in the array
for (int i = 0; i < fastnum; i++)
{
System.out.println(fastest[i].name);
}
} // end printFastest