Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.93/1107: Рейтинг темы: голосов - 1107, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 09.11.2007
Сообщений: 7

Заполнение матрицы змейкой (по спирали)

27.11.2007, 12:57. Показов 222792. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Люди!Помогите!Пожалуста!У меня зачёт скоро!Не могу сделать прогу!В чём суть?!Пользователь должен ввести размерность матрици!Матрица квадратная!А программа должна заполнить её числами по порядку 1 2 3 4 5 ....как змейка, по часовой стрелке
Вот пример, чтоб было ясно
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
Люди!Помогите кто может!Выгонят же к чертям!!!Деньги препад не берёт!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.11.2007, 12:57
Ответы с готовыми решениями:

Заполнение матрицы змейкой (по спирали)
Написать программу, которая двумерный массив целых чисел размером 5х5 заполняет следующим образом: 1 2 3 4 5 16 17 18...

Заполнение матрицы змейкой
Здравствуйте, нужно заполнить матрицу змейкой(картинка змейки вложена). Матрица NxN (1<=N<=10), заполнить числами от 1 до N^2 - 1 по...

Заполнение матрицы змейкой
Дано натуральное N (1<=N<=10). Заполнить матрицу размера N*N целыми числами 0, 1, 2, 3, …, N^2–1 Как сделать, что бы матрицу заполнило...

23
0 / 0 / 0
Регистрация: 11.05.2014
Сообщений: 10
24.07.2014, 20:56
Студворк — интернет-сервис помощи студентам
MrakSPb ,Спасибо за Ваш пример,я разобралась! =)
0
0 / 0 / 0
Регистрация: 03.04.2016
Сообщений: 10
16.10.2017, 15:47
Попалась недавно такая задачка. Мой вариант решения приведен на C#, но большой роли это не играет.
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
//Заполнить матрицу размером N*M цифрам от 1 до N*M по спирали
 
            //Принцип работы
 
            //Есть вектор, согласно которому происходит движение и заполнение значений в матрице.
            //Как только наталкиваемся на границу матрицы или заполненную ячейку то сразу
            //то сразу меняем вектор по часовой стрелке.
 
            //ВВОД
            Console.WriteLine("Set N ");
            string str = Console.ReadLine();
            int n = Convert.ToInt32(str);
            Console.WriteLine("Set M ");
            str = Console.ReadLine();
            int m = Convert.ToInt32(str);
            int[,] arr = new int[n,m];
 
 
            int number = 1; //Эту переменную увеличиваем и заполняем массив
            int vector = 1; //Переменная - вектор. 1 - вправо, 2 - вниз, 3 - влево, 4 - вверх
                                //Для удобства можно использовать очереди/стеки/деки
 
            int i=0, j=0;
 
            
            while(number<=n*m) //посколько матрица заполняется от 1 до N*M - то и 
            {                //то и окончание цикла - когда число заполнения станет равно N*M
                if (i < n && i > -1 && j < m && j > -1) //Проверка выхода за границы матрицы
                    if (arr[i, j] == 0) //Если ячейка матрицы пуста - заполняем.
                    {
                        arr[i, j] = number++;
                        switch(vector)
                        { //изменяем переменную-вектор согласно ходу нашего движения
                            case 1:
                                j++;
                                break;
                            case 2:
                                i++;
                                break;
                            case 3:
                                j--;
                                break;
                            case 4:
                                i--;
                                break;
                        }
                    }
                    else //Если натолкнулись на уже заполненную ячейку,
                    { //Возвращаемся на один шаг назад + переходим на новую клетку согласно новому вектору
                        switch (vector)
                        {
                            case 1:
                                j--;
                                i++;
                                break;
                            case 2:
                                i--;
                                j--;
                                break;
                            case 3:
                                j++;
                                i--;
                                break;
                            case 4:
                                i++;
                                j++;
                                break;
                        }
                        vector++; //И изменяем сам вектор движения
                        if (vector == 5)
                            vector = 1;
                    }
                else //Если вышли за границы матрицы.
                {//Меняем вектор, возвращаемся на один шаг назад и делаем шаг новом направлении.
                    vector++;
                    if (vector == 5) //Изменение вектора движения
                        vector = 1;
 
                    if (i == n) //Возрват в предыдущю ячейку
                        i--;
                    else if (j == m)
                        j--;
                    else if (i == -1)
                        i++;
                    else if (j == -1)
                        j++;
 
                    switch (vector) //Переход к следующей ячейке согласно новому вектору
                    {
                        case 1:
                            j++;
                            break;
                        case 2:
                            i++;
                            break;
                        case 3:
                            j--;
                            break;
                        case 4:
                            i--;
                            break;
                    }
 
                }
            //ВЫВОД МАТРИЦЫ
            }
            for (i = 0; i < n; i++)
            {
                for (j = 0; j < m; j++)
                    Console.Write(arr[i, j] + " ");
                Console.WriteLine();
            }
0
 Аватар для canadamoscow
1179 / 430 / 194
Регистрация: 23.03.2020
Сообщений: 1,021
Записей в блоге: 1
16.05.2020, 10:31
Матрица по спирали из любого угла или из центра, по часовой или против часовой
Кто перепишет из PascalABC.net на C++ ?
0
0 / 0 / 0
Регистрация: 18.04.2022
Сообщений: 2
08.05.2022, 18:19
#include <iostream>
#include <conio.h>
#include <iomanip>
using namespace std;

int main()
{
int const n = 9;
int A[n][n];
int i = 1, j, k, p = n / 2;
for (k = 1;k <= p;k++)
{
for (j = k - 1;j<n - k + 1;j++) A[k - 1][j] = i++; // верхняя
for (j = k;j<n - k + 1;j++) A[j][n - k] = i++; // правая
for (j = n - k - 1;j >= k - 1;--j) A[n - k][j] = i++; // нижняя
for (j = n - k - 1;j >= k;j--) A[j][k - 1] = i++; // левая
}
if (n % 2 == 1) A[p][p] = n*n;
for (i = 0;i < n;i++)
{
for (j = 0;j < n;j++)
{
cout << setw(4) << A[i][j];
}
cout << endl;
}
_getch();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.05.2022, 18:19

Заполнение матрицы змейкой
Дано натуральное N (1&lt;=N&lt;=10). Заполнить матрицу размера N*N целыми числами 0, 1, 2, 3, …, N^2–1 в соответствии со схемой расположения. Как...

Заполнение матрицы змейкой
Подскажите как мне изменить код #include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; int main() { int n; ...

Заполнение матрицы змейкой
Дано натуральное N (1&lt;=N&lt;=10). Заполнить матрицу размера N*N целыми числами 0, 1, 2, 3, …, N^2–1 в соответствии со схемой расположения. ...

Заполнение матрицы змейкой
Дано натуральное N (1&lt;=N&lt;=10). Заполнить матрицу размера N*N целыми числами 0, 1, 2, 3, …, N^2–1 в соответствии со схемой расположения. ...

Заполнение матрицы змейкой по столбцам
Вывести на экран и в файл 36 25 24 13 12 1 35 26 23 14 11 2 34 27 22 15 10 3 33 28 21 16 9 4 32 29 20 17 8 5 31 30 19 18 7 6


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 28.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 28.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
сукцессия 9. Математика подлости: как растения предали грибных друзей
anaschu 27.06.2026
Статья 2. Глобальная фосфорная война: эволюционно-экономические механизмы распределения биомов Земли Введение: Экологический рынок как игра с нулевой суммой Традиционная экология долгое время. . .
сукцессия 8. Как я спорил с ИИ, которые - агенты растений и ненавистники грибов!
anaschu 27.06.2026
Статья 1. Хроники грибного восстания: как Сократов диалог разрушил академические догмы ИИ Введение: Синдром «цифрового учебника» Современные большие языковые модели (LLM) обладают колоссальным. . .
Главный вопрос моделирования сукцессии
anaschu 27.06.2026
главный вопрос. Если эктомикориза лучше добывает недоступный фосфор. И ее масса максимальна из всех. А широколиственный лес тоже имеет самую крутую биомассу. То почему не возникло их симбиоза? Это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru