spiralförmiges n x n Array
-
Ich versuche ein 2d Array spiralförmig zu schreiben
vorher siehts so aus1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16nach Ablauf der zu schreibenden Funktion solls so aussehen
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7leicht ist die erste und letzte Zeil die kann ich auch schon unabhängig von der Größe schreiben.
#include <stdio.h>
#define groesse 4int 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
-
Du suchst also einen Algorithmus. Ich kann dir einen Ansatz geben, wie ich das Problem angehen würde:
-
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.
-
Wenn du die Umrandung hast, dann bleibt im inneren ein kleineres Array. Darauf kannst du dann wieder den Algorithmus aus 1 loslassen
-
Fortführen bis die Größe des Arrays 0 ist
P.S.: Du programmierst übrigens C, nicht C++
-