Вывод прямоугольной матрицы спиралью - C#

Узнай цену своей работы

Формулировка задачи:

Вводится прямоугольная матрица произвольного размера. Нужно вывести её элементы по спирали по часовой стрелке, начиная с верхнего левого угла. Код пока такой. Если последние 4 цикла зациклить, то вывод работает для квадратной матрицы, но для прямоугольной нет. Прошу помощи, что исправить в коде, чтобы работало для прямоугольных матриц, и какой цикл использовать для зацикливания последних 4 циклов) Если моё направление мысли неверно, то направьте, пожалуйста)
using System;
namespace prog1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Введите размерность матрицы");
            int n = int.Parse(Console.ReadLine()),
                m = int.Parse(Console.ReadLine());
            int [,] a = new int[n,m];
            Console.WriteLine("Введите матрицу строками через Enter");
            string[] s;
            for (int i = 0; i < n; i++)
            {
                s = Console.ReadLine().Split();
                for (int j = 0; j < m; j++)
                   a[i,j]=int.Parse(s[j]);
            }
            int k1 = 0, k2 = 1, k3 = 2;
                for (int j = k1; j < n - k1; j++)
                {
                    Console.Write(a[k1,j] + " ");
                }
                for (int j = k2; j < m - k1; j++)
                {
                    Console.Write(a[j,m - k2] + " ");
                }
                for (int j = n - k3; j > k1; j--)
                {
                    Console.Write(a[n - k2,j] + " ");
                }
                for (int j = m - k3; j > k1; j--)
                {
                    Console.Write(a[j,k1] + " ");
                }
                k1++;
                k2++;
                k3++;
            Console.ReadKey();
        }
    }
}

Решение задачи: «Вывод прямоугольной матрицы спиралью»

textual
Листинг программы
static int[] ReadAsSpiral(int[,] matrix)
{
    int width = matrix.GetLength(1);
    int height = matrix.GetLength(0);
    var array = new int[width * height];
    int index = 0;
    int minX = 0;
    int maxX = width - 1;
    int minY = 0;
    int maxY = height - 1;
    while (true)
    {
        if (maxX - minX < 0)
            break;
        for (int i = minX; i <= maxX; i++)
            array[index++] = matrix[minY, i];
        minY++;
        
        if (maxY - minY < 0)
            break;
        for (int i = minY; i <= maxY; i++)
            array[index++] = matrix[i, maxX];
        maxX--;
 
        if (maxX - minX < 0)
            break;
        for (int i = maxX; i >= minX; i--)
            array[index++] = matrix[maxY, i];
        maxY--;
 
        if (maxY - minY < 0)
            break;
        for (int i = maxY; i >= minY; i--)
            array[index++] = matrix[i, minX];
        minX++;
    }
    return array;
}
 
static void Main()
{
    int[,] matrix =
    {
        {1, 2, 3, 4, 5},
        {6, 7, 8, 9, 10},
        {11,12,13,14,15}
    };
    Console.WriteLine(string.Join(" ", ReadAsSpiral(matrix)));
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.933 из 5
Похожие ответы