Compito
Sono dati N numeri. Trova il secondo elemento più grande in una sequenza.
Questo problema consente due interpretazioni.
Ad esempio, se ci viene fornito un insieme di numeri:
\(10\ 15\ 20\ 35\ 14\ 35\ 10\), quale dovrebbe essere la risposta ?
Sotto il "secondo elemento più grande" o semplicemente "secondo massimo", può essere inteso come:
1) il valore che sarebbe al penultimo posto se disponessimo (ordinando) tutti i valori in ordine non decrescente (ciascuno successivo è maggiore o uguale al precedente). Quindi per l'insieme di numeri considerato la risposta sarà il valore 35;
2) il valore dell'elemento, che è maggiore solo del massimo. Allora la risposta è 20.
Se c'è un solo elemento massimo nell'insieme dei numeri (tutti gli altri sono inferiori), entrambe le interpretazioni sono le stesse e la risposta sarà la stessa per entrambi i casi, altrimenti la risposta sarà diversa.
Considera il primo caso (scriveremo l'algoritmo su
pseudocodice).
Per trovare la risposta, utilizzeremo due variabili:
1)
maximum1
- valore massimo (primo massimo);
2)
maximum2
- secondo massimo (la nostra risposta).
Se il range di valori cambia è noto, allora come valori iniziali prendiamo un numero che è ovviamente minore del limite inferiore del range (ad esempio, con un range da
-1000
Da
a
1000
- prendi il numero
-1001
)
Se l'intervallo di valori è sconosciuto, puoi scrivere i primi due numeri di input nei valori iniziali delle variabili
max1
e
max2
, quindi confrontarli due variabili.
input N //numero di numeri
ingresso a, b
massimo1 = a
massimo2 = b
se b > un, quindi
massimo1 = b
massimo2 = a
Successivamente, consideriamo tutti gli altri elementi (i primi 2 sono già stati visualizzati, quindi inizieremo dal 3°)
nc per i da 3 a n
ingresso A
se un > massimo1 //c'era un valore maggiore di massimo1
Quello
max2 = max1 //ex primo massimo diventa secondo
max1 = a //il nuovo elemento sarà il primo massimo
Altrimenti
//elemento successivo non più di max1
// deve essere confrontato con il valore massimo2
se un > massimo 2
Quello
max2 = a //prenderlo come nuovo valore max2
// max1 non cambia in questo caso
Tutto
Tutto
kts
Prova a implementare questo algoritmo da solo.