Adloun

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

Exercice suivant et tuteur

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.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →