Calculé la diagonale d'un tableau en Java

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

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.

+0 -0

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.

J’adorerais changer le monde, mais ils ne veulent pas me fournir le code source…

+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

Édité par Wizix

Mon projet : OpenPlane, un utilitaire en Java pour les pilotes, les vrais !

+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.

J’adorerais changer le monde, mais ils ne veulent pas me fournir le code source…

+1 -0
Auteur du sujet

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.

Édité par WinXaito

+0 -0
Auteur du sujet

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.

Édité par WinXaito

+0 -0

Cette réponse a aidé l'auteur du sujet

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é.

J’adorerais changer le monde, mais ils ne veulent pas me fournir le code source…

+0 -0
Auteur du sujet

A oui forcément, je n'avais pas du tout penser à faire une while.

1
2
3
4
5
6
int x = 0, y = table.length - 1;
while(x < table.length || y >= 0){
    System.out.println("X: " + x + " Y: " + y);
    x++;
    y--;
}

Merci !

+1 -0

Cette réponse a aidé l'auteur du sujet

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);
}

Édité par Karnaj

Je fais un carnage si ce car nage car je nage, moi, Karnaj ! - Tutoriels LaTeX - Contribuez à un tutoriel Ruby

+2 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

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