programmation Java (école d'ingénieur) · Chapitre 5 · Exercice de TD
Carré magique
Tableaux · niveau 3 (difficile)
Énoncé
Un carré est magique si les sommes de chaque ligne, de chaque colonne et des deux diagonales sont toutes égales. Écrire static boolean estMagique(int[][] c) et la tester sur
Combien de cases la méthode lit-elle, au plus, pour un carré ?
Corrigé
static boolean estMagique(int[][] c) {
int n = c.length;
int cible = 0;
for (int j = 0; j < n; j++) cible += c[0][j]; // somme de la première ligne
int d1 = 0, d2 = 0;
for (int i = 0; i < n; i++) {
int sl = 0, sc = 0; // ligne i, colonne i
for (int j = 0; j < n; j++) {
sl += c[i][j];
sc += c[j][i];
}
if (sl != cible || sc != cible) return false;
d1 += c[i][i];
d2 += c[i][n - 1 - i];
}
return d1 == cible && d2 == cible;
}
Le premier carré (le carré de Lo Shu) est magique, de somme ; le second ne l'est pas (ses lignes valent , et ). La méthode lit au plus cases pour la cible, puis cases par valeur de et deux cases diagonales : environ lectures, soit un travail proportionnel au nombre de cases.
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours, le premier QCM et 2 minutes de podcast et de vidéo. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.