Comment faire une spirale d'Ulam en Java Stack Overflow
J'ai donc passé quelques heures aujourd'hui écrivant la logique, et le transformer en code, mais je suis complètement coincé à ce moment, et je ne sais pas quoi faire. Je n'ai été la programmation en Java pendant quelques mois, donc l'ensemble de la mentalité « logique » est toujours pas tout à fait encore. Quelqu'un peut-il aider à moi réfléchir dans la logique de la façon de créer une spirale ulam en java?
Vous n'êtes pas clair sur ce qui ne va pas avec votre code; il serait préférable d'être explicite sur ce comportement que vous voulez et ce comportement que vous observez et où précisément vous êtes coincé dans ce qui les rend correspondent.
Cependant, je vous suggère de commencer par travailler sur l'impression d'un simple numéro de motif en spirale. De l'article de Wikipédia sur la spirale d'Ulam. la spirale de base ressemble à ceci:

Une petite étude de la spirale présente des propriétés intéressantes. À partir du centre (où « 1 » est imprimé), en allant vers le bas et à droite sur la diagonale que vous voyez tous les carrés impairs dans l'ordre. (Chaque ligne enregistrer le dernier étend un passé sur la place, d'inclure (2k + 1) 2 +1). De même, monter et à gauche sur la diagonale que vous voyez tous les numéros de la forme (2k) 2 + 1 ( un plus le même carrés). Vous pouvez utiliser ces propriétés pour calculer les limites de chaque rangée de la spirale.
Prenons cette dernière approche. Nous pouvons observer les propriétés suivantes pour la ligne r:
- le nombre est le (2R) 2 1 sur la diagonale principale de rangée r. Ceci est au point de coordonnées (r, r) du centre.
- il y a des nombres 1-2r connectées en série sur la ligne r (rappelons que r <= 0), going left-to-right in descending order from cell (r, r) through cell (-r, r). (For example, for r=-1, the sequence is "5—4—3" at cells (-1, -1), (0, -1), (1, -1).)
- il existe 2N + 1 chiffres sur chaque ligne, ce qui laisse (N + r) les nombres à gauche et à droite de la séquence connectée.
- pour chaque cellule (c, r) dans le couloir avec r c < r (≤ 0), the number is obtained by adding r-c to the number at cell (c, c) (which, from above, is (2c> 2 1).
- pour chaque cellule (c, r) dans le couloir avec r c> r, le nombre est obtenu en ajoutant c + r pour le nombre à la cellule (c, c) (qui, à partir de la première règle ci-dessous, est (2c + 1 ) 2).
- le numéro sur la diagonale principale de rangée r (2r + 1) 2.
- pour r < N, there are 2r+2 connected numbers in sequence on row r, in going left-to-right in ascending order from cell (-r, r) through cell (r, r+1). (For example, "7—8—9—10".) On the last row (r=N), there are only 2N+1 connected numbers, since that's where we truncate the spiral.
- il existe 2N + 1 chiffres sur chaque ligne, ce qui laisse (N-R) nombres à gauche et à (N-r-1) chiffres à droite de la séquence connectée.
- pour chaque cellule (c, r) dans le couloir avec r c < -r, the number is obtained by adding r-c to the number at cell (c, c).
- pour chaque cellule (c, r) dans le couloir avec r c> r + 1, le nombre est obtenu par addition de c-r pour le nombre à la cellule (c, c).
De ces règles, vous devriez être en mesure de créer un algorithme pour imprimer une spirale pour une N> 0. Je n'ai pas abordé la question des connexions verticales entre les cellules, mais vous pouvez appliquer une analyse similaire à découvrir les règles pour les dessiner . La mise en forme, vous devez choisir une largeur fixe pour chaque cellule (qui, évidemment, devrait être assez large pour le plus grand nombre, (2N + 1) 2).