2018 AP CSA FRQ 1
Problem, Solution, and Corrections
Part A
Write the simulate method, which simulates the frog attempting to hop in a straight line to a goal from the frog's starting position of 0 within a maximum number of hops. The method returns true if the frog successfully reached the goal within the maximum number of hops; otherwise, the method returns false.
The FrogSimulation class provides a method called hopDistance that returns an integer representing the distance (positive or negative) to be moved when the frog hops. A positive distance represents a move toward the goal. A negative distance represents a move away from the goal. The returned distance may vary from call to call. Each time the frog hops, its position is adjusted by the value returned by a call to the hopDistance method.
The frog hops until one of the following conditions becomes true:
- The frog has reached or passed the goal.
- The frog has reached a negative position.
- The frog has taken the maximum number of hops without reaching the goal.
Complete method simulate below. You must use hopDistance appropriately to receive full credit.
/** Simulates a frog attempting to reach the goal as described in part (a).
* Returns true if the frog successfully reached or passed the goal during the simulation;
* false otherwise.
*/
public boolean simulate()
public boolean simulate() {
int pos = 0;
for (int i = 0; i < maxHops; i ++) {
posNow += hopDistance();
if (posNow >= goalDistance) {
return true;
} else if (posNow < 0) {
return false;
}
}
}
public boolean simulate() {
int position = 0;
for (int count = 0; count < maxHops; count++) {
position += hopDistance();
if (position >= goalDistance) {
return true;
}
else if (position < 0) {
return false;
}
}
return false;
}
Part B
Write the runSimulations method, which performs a given number of simulations and returns the proportion of simulations in which the frog successfully reached or passed the goal. For example, if the parameter passed to runSimulations is 400, and 100 of the 400 simulate method calls returned true, then the runSimulations method should return 0.25.
Complete method runSimulations below. Assume that simulate works as specified, regardless of what you wrote in part (a). You must use simulate appropriately to receive full credit.
/** Runs num simulations and returns the proportion of simulations in which the frog
* successfully reached or passed the goal.
* Precondition: num > 0
*/
public double runSimulations(int num)
public double runSimulations(int num) {
int wins = 0;
for (int j = 0; i < num; i++) {
if (simulate()) {
wins++;
}
}
return ((double)numSuccess/num);
}
public double runSimulations(int num) {
int countSuccess = 0;
for (int count = 0; count < num; count++) {
if(simulate())
{
countSuccess++;
}
}
return (double)countSuccess / num;
}