Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
3 / 3 / 3
Регистрация: 14.11.2011
Сообщений: 63

Прочитать матрицу по спирали

22.12.2016, 14:51. Показов 2138. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребята есть такое задание нужно прочитать матрицу по спирали
вот мои наброски)) но тут читает только по строкам
есть два варианта решений один рабочий один только задумка
в первом мы используем col row directon switch и тд
во втором можно сделать так? чтоб сначала читать первую строчку
потом поворачивать матрицу на 270(ну или на 90 против часовой)
и читать строчки в таком порядке прочитал,удалил,перевернул
Какой из вариантов более рабочий?? и немножко надо помочь реализовать эти варианты)))
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
char[,] num = new char[4, 4] { { 'I', 'L', 'O', 'V' }, { 'A', 'R', 'L', 'E' }, { 'E', '!', 'Y', 'E' }, { 'D', 'C', 'I', 'P' } };
             for (int k = 0; k < num.GetLength(0); k++)
             {
                 for (int z = 0; z < num.GetLength(1); z++)
                 {
                     Console.Write(num[k, z] + " ");
                 }
                 Console.WriteLine();
             }
             Console.WriteLine();
            for (int i = 0; i < num.GetLength(1); i++)
             {
 
                 for (int j = 0; j < num.GetLength(0); j++)
                 {
                     if (num[i, 0] > 1)
                     {
 
                         Console.Write(num[i, j]+" ");
                     }
                 }
 
             }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.12.2016, 14:51
Ответы с готовыми решениями:

Заполнить матрицу по спирали
Помогите переписать код на C#, пожалуйста Условие: Улитка. Матрицу М(m, n) заполнить натуральными числами от 1 до m×n по...

Расположить матрицу по спирали
Получить целочисленную квадратную матрицу порядка 9, элементами которой являются числа 1, 2, 3, …, 81, расположенные по спирали от левого...

Заполнить матрицу ЛП, от центра по спирали
Заполнить матрицу ЛП, от центра по спирали: влево-вниз-вправо-вверх. Пожалуйста помогите:gcray:

5
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
22.12.2016, 14:55
Вывод прямоугольной матрицы спиралью
1
3 / 3 / 3
Регистрация: 14.11.2011
Сообщений: 63
22.12.2016, 15:08  [ТС]
TopLayer, а какой вариант лучше как думаешь?

Добавлено через 2 минуты
C#
1
2
3
4
5
6
7
8
9
10
11
 for (int i = 0; i < 4; i++)
            {
 
                for (int j = 0; j < 4; j++)
                {
                    num2[i, j] = num[j,(4- i-1)];
                    Console.Write(num2[i, j]+" ");
                }
                Console.WriteLine();
            }
            Console.WriteLine();
повернуть на 90 градусов получилось (против часовой)
TopLayer, как думаешь второй вариант реально сделать ?
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
22.12.2016, 15:16
Цитата Сообщение от DoNNanaY Посмотреть сообщение
как думаешь второй вариант реально сделать ?
реально

Добавлено через 1 минуту
Цитата Сообщение от DoNNanaY Посмотреть сообщение
а какой вариант лучше как думаешь?
мой
Думаю первый лучше.
1
71 / 66 / 29
Регистрация: 28.10.2013
Сообщений: 248
22.12.2016, 15:27
Лучший ответ Сообщение было отмечено DoNNanaY как решение

Решение

Нужно идти по спирали и контролировать изменение i, j в цикле обхода) крутить всю матрицу это гг (если конечно это не условие) )

Решал задачки подобные давно, опишу на словах как я вижу алгоритм)
1) Есть переменные direction (enum: row, column) и reverse (bool).
- direction (row) + reverse (false) подразумевает движение по горизонтали вправо (увеличение индекса j);
- direction (row) + reverse (true) подразумевает движение по горизонтали влево (уменьшение индекса j);
- direction (column) + reverse (false) подразумевает движение по вертикали вниз (увеличение индекса i);
- direction (column) + reverse (true) подразумевает движение по вертикали вверх (уменьшение индекса i).

2) Есть переменные top (изначально 0), right (изначально равняется количеству столбцов матрицы - 1), bottom (изначально равняется количеству строк матрицы - 1), left (изначально 0). Назначение этих переменных ограничивать матрицу с соответствующих сторон во время обхода.

3) Принцип проверки ограничений сторон:
- row + false проверяется right; при достижении ограничения инкрементим top;
- column + false проверяется bottom; при достижении ограничения инкрементим right;
- row + true проверяется left; при достижении ограничения инкрементим bottom;
- column + true проверяется top; при достижении ограничения инкрементим left;
Точно в таком же порядке будет происходить изменение direction и reverse при достижении ограничения.

4) Стартовые данные: индекс [0,0], direction (row), reverse (false). Пару switch (можно более хитроумно) и поехали.

P.S. По-моему довольно логичный алгоритм, с элементарной возможностью переделать под проход против часовой, или со стартом например из нижнего правого угла матрицы и т.п.
1
3 / 3 / 3
Регистрация: 14.11.2011
Сообщений: 63
22.12.2016, 16:25  [ТС]
ребята если вам скучно и дико хочется помочь кому-то и вы немного мазахист))
смотрите тогда что у меня получилось))
это не правильно но смысл вы наверное поняли)
мне сказали надо автоматизировать весь этот процесс засунув все в while
и уже там будет всего пару циклов вот код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
char[,] num = new char[4, 4] { { 'I', 'L', 'O', 'V' }, { 'A', 'R', 'L', 'E' }, { 'E', '!', 'Y', 'E' }, { 'D', 'C', 'I', 'P' } };
            char[,] num2=new char[4,4];
           
            for (int k = 0; k < 4; k++)
            {
                for (int z = 0; z < 4; z++)
                {
                    Console.Write(num[k, z] + " ");
                }
                Console.WriteLine();
                //Console.WriteLine(num[k, 0]);
            }
            Console.WriteLine();
 
            for (int i = 0; i < 4; i++)
            {
 
                for (int j = 1; j < 4; j++)
                {
                    num2[i, j] = num[j, (4 - i - 1)];
                    Console.Write(num2[i, j] + " ");
                }
                Console.WriteLine();
            }
            Console.WriteLine();
            Console.WriteLine();
            for (int i = 0; i < 3; i++)
            {
 
                for (int j = 1; j < 4; j++)
                {
                    num2[i, j] = num[(4 - i - 1), (4 - j - 1)];
                    Console.Write(num2[i, j] + " ");
                }
                Console.WriteLine();
            }
            Console.WriteLine();
            for (int i = 0; i < 3; i++)
            {
 
                for (int j = 1; j < 3; j++)
                {   
                    num2[i, j] = num[4 - j - 1, i];
                    Console.Write(num2[i, j] + " ");
                }
                Console.WriteLine();
            }
            Console.WriteLine();
как вы поняли я крутил матрицу и обрезал у нее строки

Добавлено через 21 минуту
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
 char[,] num = new char[4, 4] { { 'I', 'L', 'O', 'V' }, { 'A', 'R', 'L', 'E' }, { 'E', '!', 'Y', 'E' }, { 'D', 'C', 'I', 'P' } };
            char[,] num2=new char[4,4];
            
           
            for (int k = 0; k < 4; k++)
            {
                for (int z = 0; z < 4; z++)
                {
                    Console.Write(num[k, z] + " ");
                }
                Console.WriteLine();
                //Console.WriteLine(num[k, 0]);
            }
            Console.WriteLine();
 
            for (int i = 0; i < 4; i++)
            {
 
                for (int j = 1; j < 4; j++)
                {
                    num2[i, j] = num[j, (4 - i - 1)];
                    Console.Write(num2[i, j] + " ");
                }
                Console.WriteLine();
            }
            Console.WriteLine();
            Console.WriteLine();
            for (int i = 0; i < 3; i++)
            {
 
                for (int j = 1; j < 4; j++)
                {
                    num2[i, j] = num[(4 - i - 1), (4 - j - 1)];
                    Console.Write(num2[i, j] + " ");
                }
                Console.WriteLine();
            }
            Console.WriteLine();
            for (int i = 0; i < 3; i++)
            {
 
                for (int j = 1; j < 3; j++)
                {   
                    num2[i, j] = num[4 - j - 1, i];
                    Console.Write(num2[i, j] + " ");
                }
                Console.WriteLine();
            }
            Console.WriteLine();
            for(int i = 1; i < 3; i++)
            {
                for(int j = 1; j < 3; j++)
                {
                    Console.Write(num2[j,4- i-1]);
                }
                Console.WriteLine();
            }
            Console.WriteLine();
            for (int i = 1; i < 2; i++)
            {
                for (int j = 1; j < 3; j++)
                {
                    Console.Write(num2[3-j,i]);
                }
                Console.WriteLine();
            }
            Console.WriteLine();
            for (int i = 1; i < 2; i++)
            {
                for (int j = 2; j < 3; j++)
                {
                    Console.Write(num2[3 - j, i]);
                }
                Console.WriteLine();
            }
вот конец истории! но неправильный
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.12.2016, 16:25
Помогаю со студенческими работами здесь

Создать программу, которая заполняет квадратную матрицу по спирали
Создать программу, которая пополняет квадратную матрицу порядка n натуральными числами 1, 2, 3, ..., n2, записывая их в нее &quot;по...

Сформировать целочисленную квадратную матрицу, в которой числа размещены по спирали
Сформировать целочисленную квадратную матрицу порядка N, в которой последовательные натуральные числа, начиная с 1, размещены по спирали,...

Заполнить матрицу начиная с левого верхнего угла закручивающейся по спирали
Как заполнить матрицу размера (m,p) натуральными числами от 1-го до (m-p) начиная с левого верхнего угла закручивающейся по спирали....

Заполнить квадратную матрицу (n´n) четными числами 2,4,6,8,. по сходящейся к центру линии ( по спирали)
Заполнить квадратную матрицу (n´n) четными числами 2,4,6,8,... по сходящейся к центру линии ( по спирали)

Как прочитать матрицу из файла на С#?
У меня есть файл (текстовый) типа: 1.5 2.3 3.5 5.6 только матрица не 2х2, а гигантская. Как такой файл прочитать на С#. На...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru