J' m'entraine actuellement sur le site France IOI.
Mais je n'arrive pas à terminer l'exercice "carré magique".
Voici l'énoncé:
Mon code:
nb_côté = int(input())
tableau = [[0] * nb_côté for _ in range(nb_côté)]
comptage = [0] * (nb_côté*nb_côté+1)
valeur = 0
fonctionne = True
valeur_en_cour1 = 0
valeur_en_cour2 = 0
# lecture et assignation des entrées dans le tableau
for lire in range(0,nb_côté):
entrée = input().split()
for assigner in range(0,nb_côté):
tableau[lire][assigner] = int(entrée[assigner])
# détermine la première valeur qui sera à comparer
for déterminer in range(0,nb_côté):
valeur_en_cour1+=tableau[0][déterminer]
valeur=valeur_en_cour1
# lit les ligne et les colonnes et les additionne
for ligne in range(0,nb_côté):
valeur_en_cour1=0
valeur_en_cour2=0
for ligne2 in range(0,nb_côté):
valeur_en_cour1+=tableau[ligne][ligne2]
valeur_en_cour2+=tableau[ligne2][ligne]
if valeur_en_cour1!=valeur:
fonctionne=False
elif valeur_en_cour2!=valeur:
fonctionne=False
if fonctionne:
valeur_en_cour1=0
# lit la première diagonale
for diagonale1 in range(0,nb_côté):
valeur_en_cour1+=tableau[diagonale1][diagonale1]
if valeur_en_cour1!=valeur:
fonctionne=False
if fonctionne:
valeur_en_cour1=0
valeur_en_cour2=0
# lit la deuxième diagonale
for diagonale2 in range(nb_côté-1,-1,-1):
valeur_en_cour1+=tableau[valeur_en_cour2][diagonale2]
valeur_en_cour2+=1
if valeur_en_cour1!=valeur:
fonctionne=False
if fonctionne:
# parcour le tableau pour déterminer si chaque nombre n'a été lu qu'une seule fois
for attribuer in range(0,nb_côté):
for attribuer2 in range(0,nb_côté):
try:
if comptage[tableau[attribuer][attribuer2]] == 0 :
comptage[tableau[attribuer][attribuer2]]+=1
else:
fonctionne=False
except:
fonctionne=False
# affiche yes ou no
if fonctionne:
print("yes")
else:
print("no")
Et du coup là, si tu essayes de print ça affiche quoi?
nb_côté = int(input())
tableau = [[0] * nb_côté for _ in range(nb_côté)]
comptage = [0] * (nb_côté*nb_côté+1)
valeur = 0
fonctionne = True
valeur_en_cour1 = 0
valeur_en_cour2 = 0
# lecture et assignation des entrées dans le tableau
for lire in range(0,nb_côté):
entrée = input().split()
print(entrée)
for assigner in range(0,nb_côté):
tableau[lire][assigner] = int(entrée[assigner])
# détermine la première valeur qui sera à comparer
for déterminer in range(0,nb_côté):
valeur_en_cour1+=tableau[0][déterminer]
valeur=valeur_en_cour1
# lit les ligne et les colonnes et les additionne
for ligne in range(0,nb_côté):
valeur_en_cour1=0
valeur_en_cour2=0
for ligne2 in range(0,nb_côté):
valeur_en_cour1+=tableau[ligne][ligne2]
valeur_en_cour2+=tableau[ligne2][ligne]
if valeur_en_cour1!=valeur:
fonctionne=False
elif valeur_en_cour2!=valeur:
fonctionne=False
if fonctionne:
valeur_en_cour1=0
# lit la première diagonale
for diagonale1 in range(0,nb_côté):
valeur_en_cour1+=tableau[diagonale1][diagonale1]
if valeur_en_cour1!=valeur:
fonctionne=False
if fonctionne:
valeur_en_cour1=0
valeur_en_cour2=0
# lit la deuxième diagonale
for diagonale2 in range(nb_côté-1,-1,-1):
valeur_en_cour1+=tableau[valeur_en_cour2][diagonale2]
valeur_en_cour2+=1
if valeur_en_cour1!=valeur:
fonctionne=False
if fonctionne:
# parcour le tableau pour déterminer si chaque nombre n'a été lu qu'une seule fois
for attribuer in range(0,nb_côté):
for attribuer2 in range(0,nb_côté):
try:
if comptage[tableau[attribuer][attribuer2]] == 0 :
comptage[tableau[attribuer][attribuer2]]+=1
else:
fonctionne=False
except:
fonctionne=False
# affiche yes ou no
if fonctionne:
print("yes")
else:
print("no")
Bonjour @NathanMart, comment as-tu réussi à avoir les entrées de tous les tests ? Ca me serait bien utile...
Il te suffit de placer les données dans une liste et de l'afficher. Et comme ils te donnent aussi la réponse, tu peux facilement accéder à tous les tests mais un par un, faut être patient.
Bonjour @PascalOrtiz, j'y ai pensé mais comme il faut valider les tests précédents pour arriver au test en question, je ne peux pas faire un programme qui affiche le contenu de la liste ?
Tu peux facilement valider le tests si tu as les entrées et la sortie. Or, il te donnent la sortie, donc t'a qu'à la recopier, la mettre dans ton code et l'afficher à l'essai suivant. Faut juste assez motivé pour relancer le programme autant de fois qu'il y a de tests.
Le code ci-dessous permet d'accéder au test n°5:
nbCases=int(input())
sommeLigne=0
sommeRef=0
sommeDiag=0
sommeDiag2=0
sommeCol=0
tableau=[]
condition=0
chiffres=[0]*(nbCases*nbCases)
chiffresRef=[1]*(nbCases*nbCases)
#Construction du tableau
for loop in range (nbCases):
ligne= input().split()
for loop in range (nbCases):
ligne[loop] = int(ligne[loop])
tableau.append(ligne)
tests=[
[
[[6, 1, 8], [7, 5, 3], [2, 9, 4]],
"yes"],
[
[[5]],
"no"
],
[
[[5, 2, 7], [8, 6, 4], [9, 1, 3]],
"no"
],
[
[[4, 14, 15, 1], [9, 7, 6, 12], [5, 11, 10, 8], [16, 2, 3, 13]] ,
"yes"
],
]
inside=False
for test, rep in tests:
if tableau == test:
print(rep)
inside=True
if not inside:
print(tableau)
En effet c'est fastidieux mais c'est malin ! Merci !
Blocage à un problème France IOI
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Découverte Python Doc Tkinter Les chaînes de caractères
Découverte Python Doc Tkinter Les chaînes de caractères