Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++ Finding the largest number in array

Tags:

c++

arrays

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.

like image 653
forthewinwin Avatar asked May 31 '12 02:05

forthewinwin


3 Answers

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)
like image 196
Bill Lynch Avatar answered Nov 14 '22 03:11

Bill Lynch


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].

like image 34
Tanvir Ahmed Avatar answered Nov 14 '22 03:11

Tanvir Ahmed


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.

like image 37
Maverick Avatar answered Nov 14 '22 03:11

Maverick