Thème 6 : Structures avancées
Planning de la journée
Algorithme
Pour chaque village, on va calculer la distance entre la position actuelle et ce village. Pour cela, on calcule la différence entre leurs positions respectives. Si cette différence est positive, la distance est égale à cette différence, autrement la distance est égale à l'opposé de cette différence.
On utilise une variable nommée nbAccessibles pour calculer le résultat. Au début cette variable vaut zéro. Pour chaque distance que l'on calcule, on teste si cette distance est inférieure à 50 km. Si c'est le cas, on incrémente (c'est-à-dire on augmente d'une unité) le contenu de la variable nbAccessibles.
Programme
posActuelle = int(input())
nbVillages = int(input())
nbAccessibles = 0
for loop in range(nbVillages):
posVillage = int(input())
ecart = posActuelle - posVillage
if ecart < 0:
ecart = -ecart
if ecart <= 50:
nbAccessibles = nbAccessibles + 1
print(nbAccessibles)
Le juste prix
Algorithme
Il faut calculer la position du minimum d'une suite de prix. On a donc besoin d'une variable minPrix pour mémoriser la plus petite valeur vue pour le moment, une variable pour mémoriser sa position, et une variable pour connaître la position actuelle. On va alors lire tous les entiers et si on en trouve un plus petit ou égal à minPrix alors on met à jour cette variable ainsi que la position associée.
La variable posMinPrix, qui contient la position du plus petit prix vu jusqu'à présent, est initialisée à -1 au début. En effet, il faut bien lui donner une valeur initiale, et la valeur -1 (qui n'est pas une position valide) permet d'indiquer au lecteur « attention, il ne s'agit pas d'une vraie position, c'est juste une valeur initiale ».
Pour mettre à jour le minimum et sa position, on va utiliser le code suivant :
Si prix <= minPrix alors
minPrix <- prix
posMinPrix <- pos
<=
et pas <
car dans l'énoncé il est indiqué : « En cas d'égalité, on prendra la position la plus grande ». Donc si on a une égalité, il faut mettre à jour la position du minimum.
C'est une chose à laquelle il faut toujours faire attention lorsqu'on calcule des positions de minima ou maxima (pluriels de « minimum » et « maximum ») : est-ce qu'on gère bien les cas d'égalités comme nous le demande l'énoncé ?
Programme
nbMarchands = int(input())
minPrix = 1000 * 1000
posMinPrix = -1
pos = 1
for loop in range(nbMarchands):
prix = int(input())
if prix <= minPrix:
minPrix = prix
posMinPrix = pos
pos = pos + 1
print(posMinPrix)