Tâche
N nombres sont donnés. Trouvez le deuxième plus grand élément d'une séquence.
Ce problème permet deux interprétations.
Par exemple, si on nous donne un ensemble de nombres :
\(10\ 15\ 20\ 35\ 14\ 35\ 10\), alors quelle devrait être la réponse ?
Sous le "deuxième plus grand élément" ou simplement "deuxième maximum", peut être compris comme :
1) la valeur qui serait à l'avant-dernière place si nous organisions (triions) toutes les valeurs dans un ordre non décroissant (chacune suivante est supérieure ou égale à la précédente). Ensuite, pour l'ensemble de nombres considéré, la réponse sera la valeur 35 ;
2) la valeur de l'élément, qui est supérieure uniquement au maximum. Alors la réponse est 20.
S'il n'y a qu'un seul élément maximum dans l'ensemble des nombres (tous les autres sont inférieurs), alors les deux interprétations sont les mêmes, et la réponse sera la même pour les deux cas, sinon la réponse sera différente.
Considérons le premier cas (nous écrirons l'algorithme sur
pseudocode).
Pour trouver la réponse, nous allons utiliser deux variables :
1)
maximum1
- valeur maximale (premier maximum) ;
2)
maximum2
- deuxième maximum (notre réponse).
Si la plage de valeurs change est connue, alors comme valeurs initiales, nous prenons un nombre évidemment inférieur à la limite inférieure de la plage (par exemple, avec une plage de
-1000
à
1000
- prenez le numéro
-1001
)
Si la plage de valeurs est inconnue, vous pouvez écrire les deux premiers nombres d'entrée dans les valeurs initiales des variables
max1
et
max2
, puis les comparer deux variables.
entrée N //nombre de nombres
entrée a, b
max1 = un
max2 = b
si b > un, alors
max1 = b
max2 = un
Ensuite, nous considérons tous les autres éléments (les 2 premiers ont déjà été visionnés, nous allons donc commencer par le 3ème)
nc pour i de 3 à n
saisir un
si un > maximum1 // il y avait une valeur supérieure à maximum1
Ce
max2 = max1 // l'ancien premier haut devient le deuxième
max1 = a //le nouvel élément sera le premier maximum
sinon
//élément suivant pas plus que max1
// il doit être comparé avec la valeur maximum2
si un > maximum 2
Ce
max2 = a // le prendre comme nouvelle valeur max2
// max1 ne change pas dans ce cas
Tous
Tous
kts
Essayez d'implémenter cet algorithme vous-même.