using System;
class Program
{
static void Main(string[] args)
{
while (true)
{
Console.Write("Enter number of rows/columns: ");
int input;
bool isNumber = int.TryParse(Console.ReadLine(), out input);
if (!isNumber)
{
return;
} int[,] array = new int[input, input];
int iterator = 0;
int row = 0;
int col = 0;
int step = 1;
for (int num = 1; num <= input * input; num++)
{
array[row, col] = num;
switch (step)
{
case 1:
if (col == (input - iterator - 1))
{
row++;
step++;
}
else
{
col++;
}
break;
case 2:
if (row == (input - iterator - 1))
{
col--;
step++;
}
else
{
row++;
}
break;
case 3:
if (col == (0 + iterator))
{
row--;
step++;
}
else
{
col--;
}
break;
case 4:
if (row == (1 + iterator))
{
col++;
step = 1;
iterator++;
}
else
{
row--;
}
break;
}
}
ShowGrid(array);
}
}
public static void ShowGrid(int[,] array)
{
int rowLength = array.GetLength(0);
int colLength = array.GetLength(1);
Console.WriteLine();
for (int i = 0; i < rowLength; i++)
{
for (int j = 0; j < colLength; j++)
{
Console.Write(string.Format("{0}\t", array[i, j]));
}
Console.Write(Environment.NewLine + Environment.NewLine);
}
Console.WriteLine();
}
}
dXNpbmcgU3lzdGVtOwoKY2xhc3MgUHJvZ3JhbQp7CiAgICBzdGF0aWMgdm9pZCBNYWluKHN0cmluZ1tdIGFyZ3MpCiAgICB7CiAgICAgICAgd2hpbGUgKHRydWUpCiAgICAgICAgewogICAgICAgICAgICBDb25zb2xlLldyaXRlKCJFbnRlciBudW1iZXIgb2Ygcm93cy9jb2x1bW5zOiAiKTsKICAgICAgICAgICAgaW50IGlucHV0OwogICAgICAgICAgICBib29sIGlzTnVtYmVyID0gaW50LlRyeVBhcnNlKENvbnNvbGUuUmVhZExpbmUoKSwgb3V0IGlucHV0KTsKCiAgICAgICAgICAgIGlmICghaXNOdW1iZXIpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfSAgICAgICAgICAgICAgICBpbnRbLF0gYXJyYXkgPSBuZXcgaW50W2lucHV0LCBpbnB1dF07CgogICAgICAgICAgICBpbnQgaXRlcmF0b3IgPSAwOwogICAgICAgICAgICBpbnQgcm93ID0gMDsKICAgICAgICAgICAgaW50IGNvbCA9IDA7CiAgICAgICAgICAgIGludCBzdGVwID0gMTsKICAgICAgICAgICAgZm9yIChpbnQgbnVtID0gMTsgbnVtIDw9IGlucHV0ICogaW5wdXQ7IG51bSsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBhcnJheVtyb3csIGNvbF0gPSBudW07CgogICAgICAgICAgICAgICAgc3dpdGNoIChzdGVwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbCA9PSAoaW5wdXQgLSBpdGVyYXRvciAtIDEpKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3crKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXArKzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbCsrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3cgPT0gKGlucHV0IC0gaXRlcmF0b3IgLSAxKSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sLS07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwKys7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3crKzsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbCA9PSAoMCArIGl0ZXJhdG9yKSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LS07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwKys7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wtLTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocm93ID09ICgxICsgaXRlcmF0b3IpKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXAgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IrKzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy0tOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIFNob3dHcmlkKGFycmF5KTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyB2b2lkIFNob3dHcmlkKGludFssXSBhcnJheSkKICAgIHsKICAgICAgICBpbnQgcm93TGVuZ3RoID0gYXJyYXkuR2V0TGVuZ3RoKDApOwogICAgICAgIGludCBjb2xMZW5ndGggPSBhcnJheS5HZXRMZW5ndGgoMSk7CgogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dMZW5ndGg7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgY29sTGVuZ3RoOyBqKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGUoc3RyaW5nLkZvcm1hdCgiezB9XHQiLCBhcnJheVtpLCBqXSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIENvbnNvbGUuV3JpdGUoRW52aXJvbm1lbnQuTmV3TGluZSArIEVudmlyb25tZW50Lk5ld0xpbmUpOwogICAgICAgIH0KICAgICAgICBDb25zb2xlLldyaXRlTGluZSgpOwogICAgfQp9