#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int find_digits(int num) {
char buf[128];
}
void print(int num, int m[num][num]) {
unsigned int i, j;
int padding = find_digits(num);
for (i = 0; i < num; i++) {
for (j = 0; j < num; j++)
printf("%*d ", padding
, m
[j
][i
]); }
}
void spiral(unsigned int num) {
unsigned int top_num = num * num;
unsigned int current_num = 1;
unsigned int i, j, dir = 0, times = 0;
int curX = 0, curY = 0;
int matrix[num][num];
for (i = 0; i < num; i++)
for (j = 0; j < num; j++)
matrix[i][j] = 0;
// 0 = right
// 1 = down
// 2 = left
// 3 = up
while (current_num <= top_num) {
matrix[curX][curY] = current_num;
current_num++;
switch (dir) {
case 0:
curX++;
break;
case 1:
curY++;
break;
case 2:
curX--;
break;
case 3:
curY--;
break;
default:
break;
}
if (curX >= num - times && dir == 0) {
curX--;
curY++;
dir = 1;
} else if ((curX < 0 && dir == 2) || (times > 0 && (curX < times && dir == 2))) {
curX++;
curY--;
dir = 3;
} else if (curY >= num - times && dir == 1) {
curY--;
curX--;
dir = 2;
} else if ((curY < 0 && dir == 3) || (times > 0 && (curY < times && dir == 3))) {
curY++;
curX++;
dir = 0;
}
if (matrix[curX][curY] != 0) {
if (curX == curY && dir == 3) {
times++;
curX++;
curY++;
dir = 0;
} else {
break;
}
}
}
print(num, matrix);
}
int main(void) {
unsigned int num;
while (fscanf(stdin
, "%d", &num
) == 1) { if (num < 1) {
fprintf(stderr
, "please enter a number greater than 0 (you entered %d)\n", num
); continue;
}
spiral(num);
}
return EXIT_SUCCESS;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgkjaW5jbHVkZSA8c3RkbGliLmg+CgkjaW5jbHVkZSA8c3RyaW5nLmg+CgoJaW50IGZpbmRfZGlnaXRzKGludCBudW0pIHsKCQljaGFyIGJ1ZlsxMjhdOwoJCXNwcmludGYoYnVmLCAiJWQiLCBudW0gKiBudW0pOwoJCXJldHVybiBzdHJsZW4oYnVmKTsKCX0KCgl2b2lkIHByaW50KGludCBudW0sIGludCBtW251bV1bbnVtXSkgewoJCXVuc2lnbmVkIGludCBpLCBqOwoJCWludCBwYWRkaW5nID0gZmluZF9kaWdpdHMobnVtKTsKCQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKCQkJZm9yIChqID0gMDsgaiA8IG51bTsgaisrKQoJCQkJcHJpbnRmKCIlKmQgIiwgcGFkZGluZywgbVtqXVtpXSk7CgkJCXByaW50ZigiXG4iKTsKCQl9Cgl9CgoJdm9pZCBzcGlyYWwodW5zaWduZWQgaW50IG51bSkgewoJCXVuc2lnbmVkIGludCB0b3BfbnVtID0gbnVtICogbnVtOwoJCXVuc2lnbmVkIGludCBjdXJyZW50X251bSA9IDE7CgkJdW5zaWduZWQgaW50IGksIGosIGRpciA9IDAsIHRpbWVzID0gMDsKCQlpbnQgY3VyWCA9IDAsIGN1clkgPSAwOwoKCQlpbnQgbWF0cml4W251bV1bbnVtXTsKCQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCgkJCWZvciAoaiA9IDA7IGogPCBudW07IGorKykKCQkJCW1hdHJpeFtpXVtqXSA9IDA7CgoJCS8vIDAgPSByaWdodAoJCS8vIDEgPSBkb3duCgkJLy8gMiA9IGxlZnQKCQkvLyAzID0gdXAKCgkJd2hpbGUgKGN1cnJlbnRfbnVtIDw9IHRvcF9udW0pIHsKCQkJbWF0cml4W2N1clhdW2N1clldID0gY3VycmVudF9udW07CgkJCWN1cnJlbnRfbnVtKys7CgkJCQoJCQlzd2l0Y2ggKGRpcikgewoJCQkJY2FzZSAwOgoJCQkJCWN1clgrKzsKCQkJCQlicmVhazsKCQkJCWNhc2UgMToKCQkJCQljdXJZKys7CgkJCQkJYnJlYWs7CgkJCQljYXNlIDI6CgkJCQkJY3VyWC0tOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAzOgoJCQkJCWN1clktLTsKCQkJCQlicmVhazsKCQkJCWRlZmF1bHQ6CgkJCQkJZnByaW50ZihzdGRlcnIsICJlcnJvclxuIik7CgkJCQkJYnJlYWs7CgkJCX0KCgkJCWlmIChjdXJYID49IG51bSAtIHRpbWVzICYmIGRpciA9PSAwKSB7CgkJCQljdXJYLS07CgkJCQljdXJZKys7CgkJCQlkaXIgPSAxOwoJCQl9IGVsc2UgaWYgKChjdXJYIDwgMCAmJiBkaXIgPT0gMikgfHwgKHRpbWVzID4gMCAmJiAoY3VyWCA8IHRpbWVzICYmIGRpciA9PSAyKSkpIHsKCQkJCWN1clgrKzsKCQkJCWN1clktLTsKCQkJCWRpciA9IDM7CgkJCX0gZWxzZSBpZiAoY3VyWSA+PSBudW0gLSB0aW1lcyAmJiBkaXIgPT0gMSkgewoJCQkJY3VyWS0tOwoJCQkJY3VyWC0tOwoJCQkJZGlyID0gMjsKCQkJfSBlbHNlIGlmICgoY3VyWSA8IDAgJiYgZGlyID09IDMpIHx8ICh0aW1lcyA+IDAgJiYgKGN1clkgPCB0aW1lcyAmJiBkaXIgPT0gMykpKSB7CgkJCQljdXJZKys7CgkJCQljdXJYKys7CgkJCQlkaXIgPSAwOwoJCQl9CgoJCQlpZiAobWF0cml4W2N1clhdW2N1clldICE9IDApIHsKCQkJCWlmIChjdXJYID09IGN1clkgJiYgZGlyID09IDMpIHsKCQkJCQl0aW1lcysrOwoJCQkJCWN1clgrKzsKCQkJCQljdXJZKys7CgkJCQkJZGlyID0gMDsKCQkJCX0gZWxzZSB7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQkJCgkJfQoJCXByaW50KG51bSwgbWF0cml4KTsKCX0KCglpbnQgbWFpbih2b2lkKSB7CgkJdW5zaWduZWQgaW50IG51bTsKCQl3aGlsZSAoZnNjYW5mKHN0ZGluLCAiJWQiLCAmbnVtKSA9PSAxKSB7CgkJCWlmIChudW0gPCAxKSB7CgkJCQlmcHJpbnRmKHN0ZGVyciwgInBsZWFzZSBlbnRlciBhIG51bWJlciBncmVhdGVyIHRoYW4gMCAoeW91IGVudGVyZWQgJWQpXG4iLCBudW0pOwoJCQkJY29udGludWU7CgkJCX0KCQkJc3BpcmFsKG51bSk7CgkJfQoJCXJldHVybiBFWElUX1NVQ0NFU1M7Cgl9