IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Matrice de nombres en spirale


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 346
    Par défaut Matrice de nombres en spirale
    Bonjour,

    j'ai repris l'algorithme ici : https://www.techiedelight.com/print-...t-extra-space/,

    en fait je souhaite faire la même chose mais dans le sens horaire. le 2 a gauche du 1 le 3 sous le 2 etc......

    J'ai beau lire et relire l'explication, je n'y comprends rien du tout !

    Espérant avoir une lumière.

    PS: je suis pas un expert algorithme ...

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 681
    Par défaut
    faites déjà le code pour générer la spirale dans l'autre sens, cela vous fera une base de travail qui vous servira à comprendre quelle partie du code s'occupe de quelles cases.

  3. #3
    Membre chevronné Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 346
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    #define MAX(X, Y) (((X) > (Y)) ? (X) : (Y)) 
    #include <stdio.h>
    void affiche_spirale(int N)
    {
        int i,j,x;
        for (i = 0; i < N; i++)
        {
            for (j = 0; j < N; j++)
            {
                // `x` stores the layer in which (i, j)'th element lies
                // find a minimum of four inputs
     
                x = MAX(MAX(i, j), MAX(N - 1 - i, N - 1 - j));
     
                // print upper right half
                if (i < j) {
                    printf("%i. (i,j): %i,%i x:%i",(N - 2*x) * (N - 2*x) - i - j + 2*x,i,j,x);
                }
                // print lower left half
                else {
                    printf("%i.. (i,j): (%i,%i) x:%i",(N - 2*x -2) * (N - 2*x - 2) + i + j -2*x,i,j,x);
                }
     
                printf("\t");
            }
     
            printf("\n");
        }
    }
     
     
    int main() {
     
        affiche_spirale(3);
        return 0;
    }
    avec ce code c'est presque ça mais la 1ère et dernière ligne doit être inversé

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 681
    Par défaut
    j'ai l'impression que le sens que vous voulez est une symétrie des lignes donc faites aller i de N - 1 à 0.

  5. #5
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 227
    Par défaut
    Une étape, pour que tout le monde suive, c'est d'écrire ici le résultat visé :

    25.10.11.12.13
    24.09.02.03.14
    23.08.01.04.15
    22.07.06.05.16
    21.20.19.18.17

    C'est ça qu'on veut ?
    J'ai peu de chances de tomber juste, j'ai pris une disposition quasi au pif.
    Tu remplis la grille voulue à la main.
    Soit ça te suffit pour résoudre l'exercice, soit tu la partages, pour que tout le monde ait les billes pour réfléchir.

  6. #6
    Membre chevronné Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 346
    Par défaut
    c'est dans ce sens que je souhaite:
    6 7 8
    5 0 1
    4 3 2

  7. #7
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 227
    Par défaut
    Dessine la un peu plus grande, au moins 5x5, voire 7x7.
    Tu vas voir 4 triangles dans lesquels il y a une certaine cohérence. Et le carré, c'est la somme de ces 4 triangles.

    Sur mon dessin, j'ai numéroté à partir de 1, c'est un peu plus intuitif. Tu peux voir que quand on a rempli le carré 3x3 du milieu, on a écrit 3x3=3²=9 nombres. Puis quand on a fini le carré 5x5, on a écrit 5x5=5²=25 nombres.
    Chaque tour supplémentaire commence donc à 7²+1, 9²+1, 11²+1 etc.
    Dans ton cas, la numérotation commence à 0, il faut décaler de 1.

    Quand tu places un nombre tu as besoin de savoir si la case en question est dans le tour n°1, n°2 ...n°k. Plus elle est loin du centre, plus le n° du tour est élevé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/05/2016, 13h48
  2. Générer une matrice avec nombre aléatoires
    Par Ryu0174 dans le forum Général Python
    Réponses: 5
    Dernier message: 23/05/2012, 21h40
  3. [Débutant] Charger un fichier texte dans une matrice de nombres (fonction load).
    Par Invité dans le forum MATLAB
    Réponses: 1
    Dernier message: 09/07/2010, 16h54
  4. Remplir et ordonner une matrice de nombres réels
    Par madaou dans le forum Pascal
    Réponses: 4
    Dernier message: 20/11/2008, 10h37
  5. Créer matrice en spirale
    Par rod59 dans le forum Développement 2D, 3D et Jeux
    Réponses: 4
    Dernier message: 25/02/2006, 13h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo