2012-05-31 31 views
5

Mi problema de tarea:C++ Encontrar el mayor número en serie

Una matriz de enteros con nombre parkingTickets ha sido declarado e inicializado con el número de multas de estacionamiento dada por la policía de la ciudad todos los días desde el comienzo del año en curso . (Por lo tanto, el primer elemento de la matriz contiene el número de tickets dados el 1 de enero; el último elemento contiene la cantidad de tickets dados hoy.)

Se ha declarado e inicializado una variable llamada ndays para contener el tamaño del formación. (Por lo tanto, si hoy fuera el 18 de enero, ndays tendría el valor 18; si hoy fuera el 3 de febrero, ndays tendría el valor 34.)

Además, se ha declarado una variable llamada Most Tickets, junto con una variable k .

Sin usar variables adicionales, y sin cambiar los valores de ndays o los elementos de la matriz de aparcamientos, escriba un código que dé como resultado la mayoría de Tickets que contengan el mayor valor encontrado en parkingTickets.

Para esto, tengo el siguiente código:

for(k = 0; k < ndays; k++) { 
    if (parkingTickets[k] > parkingTickets[ndays]) { 
     mostTickets = parkingTickets[k]; 
    } 
} 

Pero mi ejercicio presentador está diciendo que está mal. ¿Qué pasa con mi código? Intenté parkingTickets[ndays - 1] también, pero eso tampoco funciona.

+1

¿Ha probado el código para ver si está funcionando? Se ve bien para mí (a primera vista) – Jon

+3

¿No deberías estar comparando 'parkingTickets [k]' 'a mostTickets', en lugar de' parkingTickets [Ndays] '(que puede ser la final de la matriz de una sola pasada dependiendo sobre cómo la matriz está declarada y funcionando según su declaración)? – birryree

+1

Lo siento, no vi la etiqueta "tarea" y proporcioné una solución directa. Eliminó mi respuesta – mfontanini

Respuesta

9

Su comparación es incorrecta. Está comparando el elemento actual con el último elemento cada vez. Lo que necesita hacer es comparar el elemento actual con la mayoría de Tickets. es decir,

if(parkingTickets[k] > mostTickets) 

Además, por si acaso, yo recomendaría inicializar mostTickets a ser parkingTickets [0].

+0

"Además, por si acaso, recomendaría inicializar mostTickets a ser parkingTickets [0]." - sí, ya sea eso o 0, y si se utiliza el estacionamiento de Tickers [0], el bucle for podría cambiarse a 'k = 1; k

+1

Y si inicializar 'mostTickets = parkingTickets [0];', usted debe comprobar para asegurarse de que 'Ndays> 0' (de lo contrario vas a leer más allá del final de la matriz vacía). – user

+0

El problema con la inicialización a 0, descubrí, es que si la matriz contiene todos los números negativos, entonces se encontrará con problemas. Buena llamada de Oliver también. No quiere un error de matriz fuera de límites. –

11

C++ proporciona std::max_element también. Dudo que tu profesor quiera que uses esto, pero probablemente sea bueno saber sobre la biblioteca estándar.

mostTickets = *std::max_element(parking_tickets, parking_tickets + ndays) 
+1

+1 La mejor solución es siempre dejar de tratar de volver a implementar incorrectamente la biblioteca estándar. – ildjarn

+0

+1 ¡guau! ¡Nunca nuevo eso! – Rhexis

+0

Dado que esto es tarea, sospecho que una solución que usa std :: max_element() no será aceptable para obtener una calificación. –

1

Analicemos en primer lugar la solución

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]; 
    } 
} 

El problema de esta solución es que no se ha inicializado la variable mostTickets y usted no tiene una cláusula else. Este código funcionaría para usted.

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]; 
    } 
} 

Después de esto mostTickets mantendrá el valor del mayor número en la matriz. Esta solución tomará O (n) para completarse ya que estamos recorriendo el conjunto y algunos trabajos para realizar comparaciones.

Cuestiones relacionadas