spiralförmiges n x n Array



  • Ich versuche ein 2d Array spiralförmig zu schreiben
    vorher siehts so aus

    1 2 3 4
    5 6 7 8
    9 10 11 12
    13 14 15 16

    nach Ablauf der zu schreibenden Funktion solls so aussehen

    1 2 3 4
    12 13 14 5
    11 16 15 6
    10 9 8 7

    leicht ist die erste und letzte Zeil die kann ich auch schon unabhängig von der Größe schreiben.
    #include <stdio.h>
    #define groesse 4

    int main(void)
    {
    int arr [groesse] [groesse];
    int wert = 1;
    for (int a = 0; a < groesse; a++)
    {
    for (int b = 0; b <groesse; b++)
    {
    arr [a][b] = wert;
    wert++;
    }
    }
    //erste Zeile
    for (int i = 0; i<groesse; i++)
    {
    printf("%d",arr[0][i]);
    }
    }
    //letzte Zeile sind immer vom array [2] [die ersten groesse-2] und array[1][3] array[1][2]

    for int (l = groesse-3; l >=0; l--)
    {
    printf("%d",arr[2][l]);
    }
    for int (k = groesse-1; k >groesse-3; k--)
    {
    printf("%d",arr[1][k]);
    }

    aber mit dem Rest bin ich ziemlich ratlos, hab auch schon viel probiert


  • Mod

    Du suchst also einen Algorithmus. Ich kann dir einen Ansatz geben, wie ich das Problem angehen würde:

    1. Die erste und letzte Zeile sind leicht wie du selber schon gemerkt hast. Wenn du die hast, ist es auch leicht, den linken und den rechten Rand zu machen.

    2. Wenn du die Umrandung hast, dann bleibt im inneren ein kleineres Array. Darauf kannst du dann wieder den Algorithmus aus 1 loslassen

    3. Fortführen bis die Größe des Arrays 0 ist

    P.S.: Du programmierst übrigens C, nicht C++


Anmelden zum Antworten