Calculé la diagonale d'un tableau en Java

Le problème exposé dans ce sujet a été résolu.

Bonjour,

j'aurais besoin sur une grille similaire à celle-ci de calculer la sommes des diagonales:

Carré magique

J'ai réussi à calculer la première diagonale sans problème, mais pour la deuxième je ne sais pas comment m'y prendre. Il faudrait je pense inversé le tableau, mais je ne sais absolument pas si c'est celà qu'il faut faire et comment.

Mon tableau se trouve sous la forme table[y][x]

Je vous remercie de votre aide. WinXaito.

La première il faut partir de x=0 et y=0 et incrémenter a chaque tour.

La deuxième est assez proche mais il faut partir de x=2 et y=0 puis incrémenter y et décrémenter x à chaque tour.

+0 -0

La première diagonale, c'est bien {2; 5; 8} ? La seconde, c'est bien {6; 5; 4} ?

Si oui, 6 se trouve en position table[0][2], 5 en table[1][1], 4 en table[2][0]. Ne remarques-tu pas quelque chose ? (Tu retrouveras ça quelque soit la taille de ton tableau) ;)

EDIT: cramé, mais je pose quand même, moi je ne donnais pas la réponse immédiatement ! :p

+2 -0

@Wizix, Désolé, j'ai pensé que le problème était assez simple pour que la solution lui reste en tête sans trop qu'il ce force. Mais tu as raison j'aurais du faire deviner puisqu'il n'y arrive pas par lui même.

+1 -0

Je n'ai pas préciser que le tableau pouvait être de taille variable (3x3, 5x5, 7x7, …)

Je vais peut-être paraître stupide mais il faut pas juste faire sum = table[0][2] + table[1][1] + table[2][0] ?

Donc ceci n'est pas directement possible.

Je vais voir les autres solutions

[edit]

J'ai quelque chose comme ceci

1
2
3
4
5
for(int x = 0; x < table.length; x++){
    for(int y = table.length; y >= 0; y--){

    }
}

Mais comment faire pour ne pas me retrouver avec table[0][2], table[0][1], table[0][0] Eviter de me chopper tous les y (Ou X Selon l'ordre que l'on prend).

J'ai peut-être un petit raisonnement logique qui m’échappe.

+0 -0

J'obtiens ceci avec cette fonction:

1
2
3
4
5
6
7
8
9
X: 2 Y: 0
X: 1 Y: 0
X: 0 Y: 0
X: 2 Y: 1
X: 1 Y: 1
X: 0 Y: 1
X: 2 Y: 2
X: 1 Y: 2
X: 0 Y: 2

Or j'aimerais

1
2
3
X: 2 Y: 0
X: 1 Y: 1
X: 0 Y: 2

[edit]
Depuis avant je m'embrouille en inversant les X et Y, n'y faites pas attention.

+0 -0

Ah bah oui excuse moi!! Ta deuxième boucle fort s'exécute pour chaque valeur de la premiere!

Ici tu devrais utiliser un while et faire des variables que tu incrémenté toi meme. Ça te laissera plus de maniabilité.

+0 -0

Salut,

On peut quand même utiliser un for en utilisant le fait qu’à chaque fois que tu es sur la colonne i, tu dois être sur la ligne l - i avec l + 1 la longueur. Ce qui donne un code du genre.

1
2
3
4
int i = 0, l = table.length - 1;
for(int i = 0; i <= l; i++){
    System.out.println("X: " + (l - i) + " Y: " + i);
}

Par contre, en faisant ça, on parcourt la diagonale du bas vers le haut. Pour la parcourir du haut vers le bas, il faut faire i aller dans l’autre sens.

1
2
3
4
int i = 0, l = table.length - 1;
for(int i = l; i >= 0; i--){
    System.out.println("X: " + (l - i) + " Y: " + i);
}
+2 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte