My homework problem:
An array of integers named parkingTickets has been declared and initialized to the number of parking tickets given out by the city police each day since the beginning of the current year. (Thus, the first element of the array contains the number of tickets given on January 1; the last element contains the number of tickets given today.)
A variable named ndays has been declared and initialized to hold the size of the array. (Thus, if today were January 18, ndays would have the value 18; if today were February 3, ndays would have the value 34.)
In addition, a variable named mostTickets has been declared, along with a variable k .
Without using any additional variables, and without changing the values of ndays or the elements of the parkingTickets array, write some code that results in mostTickets containing the largest value found in parkingTickets .
For this, I have the following code:
for(k = 0; k < ndays; k++) {
if (parkingTickets[k] > parkingTickets[ndays]) {
mostTickets = parkingTickets[k];
}
}
But my exercise submitter is saying it's wrong. What's wrong with my code? I tried parkingTickets[ndays - 1]
as well, but that doesn't work either.
4 Answers 4
C++ provides std::max_element as well. I doubt that your teacher wants you to use this, but it's probably good to know about the standard library.
mostTickets = *std::max_element(parking_tickets, parking_tickets + ndays)
-
1+1 The best solution is always to stop trying to poorly reimplement the standard library.ildjarn– ildjarn2012年05月31日 02:32:39 +00:00Commented May 31, 2012 at 2:32
-
Since this is homework, I suspect that a solution using std::max_element() won't be acceptable to turn in for a grade.Code-Apprentice– Code-Apprentice2012年07月27日 16:43:48 +00:00Commented Jul 27, 2012 at 16:43
Your comparison is wrong. You're comparing the current element to the last element each time. What you need to do is compare the current element to mostTickets. i.e.
if(parkingTickets[k] > mostTickets)
Also, for good measure, I would recommend initializing mostTickets to being parkingTickets[0].
-
"Also, for good measure, I would recommend initializing mostTickets to being parkingTickets[0]." - yes, either that or 0, and if using parkingTickers[0] then the for loop could be changed to
k = 1; k < ndays...
to emphasise the logic.Tony Delroy– Tony Delroy2012年05月31日 02:15:16 +00:00Commented May 31, 2012 at 2:15 -
1And if you initialize
mostTickets = parkingTickets[0];
, you should check to make surendays > 0
(otherwise you'll read past the end of the empty array).user– user2012年05月31日 02:16:27 +00:00Commented May 31, 2012 at 2:16 -
The problem with initializing it to 0, I found, is that if the array contains all negative numbers, then you run into problems. Good call by Oliver as well. You don't want an array out of bounds error.Tanvir Ahmed– Tanvir Ahmed2012年05月31日 02:17:19 +00:00Commented May 31, 2012 at 2:17
Let us first analyze your solution
int parkingTickets[] = {3,6,7,4,8,10,0};
int ndays = 7;
for(k = 0; k < ndays; k++) {
if (parkingTickets[k] > parkingTickets[ndays]) {
mostTickets = parkingTickets[k];
}
}
The problem with this solution is that you have not initialized the mostTickets variable and you dont have an else clause. This code would work for you.
int parkingTickets[] = {3,6,7,4,8,10,0};
int ndays = 7;
int mostTickets = -1;
for(int k = 0; k < ndays; k++) {
if (parkingTickets[k] > mostTickets) {
mostTickets = parkingTickets[k];
}
}
After this mostTickets will hold the value of the largest number in the array. This solution will take O(n) to complete since we are looping through the array and some work for comparisons.
mostTickets = parkingTickets[0]; k = 1;
while (k < ndays) {
if (mostTickets < parkingTickets[k])
mostTickets = parkingTickets[k];
k++;
}
-
1This doesn't explain at all what is wrong with the initial code. And it is unclear why you use a while loop instead of the for loop provided in the question.BDL– BDL2022年02月01日 17:10:49 +00:00Commented Feb 1, 2022 at 17:10
parkingTickets[k]
tomostTickets
, rather thanparkingTickets[ndays]
(which is either the end of the array of one-past depending on how the array is declared and going by your statement)?