2012-05-31 18 views
5

Il mio problema compiti a casa:C++ Trovare il più grande numero di serie

Un array di interi nome parkingTickets è stato dichiarato e inizializzato al numero di biglietti di parcheggio dato fuori dalla polizia della città ogni giorno dall'inizio dell'anno in corso . (Quindi, il primo elemento dell'array contiene il numero di ticket dati il ​​1 ° gennaio, l'ultimo elemento contiene il numero di ticket dati oggi.)

Una variabile denominata ndays è stata dichiarata e inizializzata per contenere la dimensione del numero di ticket. array. (Quindi, se oggi fosse il 18 gennaio, il ndays avrebbe il valore 18, se oggi fosse il 3 febbraio, il nils avrebbe il valore 34.)

Inoltre, è stata dichiarata una variabile denominata mostTickets, insieme a una variabile k .

Senza utilizzare alcuna variabile aggiuntiva e senza modificare i valori di ndays o gli elementi dell'array parkingTickets, scrivere un codice che risulti nella maggior parte dei Ticket contenenti il ​​valore più grande trovato in parkingTickets.

Per questo, ho il seguente codice:

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

Ma il mio esercizio mittente sta dicendo che è sbagliato. Cosa c'è che non va nel mio codice? Ho provato anche parkingTickets[ndays - 1], ma non funziona neanche.

+1

Hai testato il codice per vedere se funziona? Mi sembra giusto (a prima vista) – Jon

+3

Non dovresti confrontare 'parkingTickets [k]' con 'mostTickets', piuttosto che' parkingTickets [ndays] '(che è o la fine dell'array di one-past depend su come la matrice è dichiarata e sta andando dalla tua dichiarazione)? – birryree

+1

Siamo spiacenti, non ho visto il tag "compiti a casa" e fornito una soluzione diretta. Cancellata la mia risposta. – mfontanini

risposta

9

Il confronto è sbagliato. Stai confrontando l'elemento corrente con l'ultimo elemento ogni volta. Quello che devi fare è confrontare l'elemento corrente con la maggior parte dei Ticket. cioè

if(parkingTickets[k] > mostTickets) 

Inoltre, per buona misura, consiglio inizializzazione mostTickets all'essere parkingTickets [0].

+0

"Inoltre, per una buona misura, raccomanderei di inizializzare mostTickets per essere parkingTickets [0]." - sì, o quello o 0, e se si utilizza parkingTickers [0], allora il ciclo for potrebbe essere cambiato in 'k = 1; k

+1

E se si inizializza 'mostTickets = parkingTickets [0];', si dovrebbe verificare per 'ndays> 0' (altrimenti si leggerà oltre la fine dell'array vuoto). – user

+0

Il problema con l'inizializzazione su 0, ho trovato, è che se la matrice contiene tutti i numeri negativi, si incontrano problemi. Buona chiamata anche da Oliver. Non si desidera un errore di matrice fuori dai limiti. –

11

C++ fornisce anche std::max_element. Dubito che il tuo insegnante voglia che tu lo usi, ma probabilmente è utile conoscere la libreria standard.

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

+1 La soluzione migliore consiste sempre nel tentativo di reimplementare male la libreria standard. – ildjarn

+0

+1 wow !!! Non l'ho mai detto! – Rhexis

+0

Dato che si tratta di compiti a casa, ho il sospetto che una soluzione che utilizza std :: max_element() non sia accettabile per essere consegnata per un voto. –

1

Vediamo prima analizziamo la soluzione

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

Il problema di questa soluzione è che non si è inizializzato la variabile mostTickets e non avete una clausola else. Questo codice potrebbe funzionare per te.

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

Dopo questa maggior parte dei Ticket manterrà il valore del numero più grande nell'array. Questa soluzione impiegherà O (n) per essere completata dal momento che stiamo eseguendo un ciclo attraverso l'array e alcuni funzionano per i confronti.

Problemi correlati