3 / 3 / 3
Регистрация: 14.11.2011
Сообщений: 63

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

22.12.2016, 14:51. Показов 2177. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru