Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/64: Рейтинг темы: голосов - 64, средняя оценка - 4.70
0 / 0 / 1
Регистрация: 11.11.2017
Сообщений: 14

Заполнение матрицы змейкой снизу-вверх, слева-направо

23.11.2017, 16:52. Показов 12984. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно написать функцию которая заполняет двумерный динамический массив m*m по змейке (прикрепляю изображение)

У меня упорно не получается найти зависимость для нечетных строк

C++
1
2
3
4
5
6
7
8
void snake(int **arr, int m) {
    int n = 0, i, j;
    for (i = m - 1; i >= 0; i--)
        for (j = 0; j < m; j++) {
            if (i % 2 !=0) {arr[i][j] =(i - 1)*m - j - 1} else {arr[i][j] = n}
            n=n+1;
        }
}
Миниатюры
Заполнение матрицы змейкой снизу-вверх, слева-направо  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.11.2017, 16:52
Ответы с готовыми решениями:

Заполнить матрицу змейкой справа на лево, снизу вверх от 1 до 24
Помогите создать матрицу по образцу: 19 20 21 22 23 24 18 17 16 15 14 13 7 8 9 10 11 12 6 5 4 3 2 1

Заполнение матрицы змейкой по диагоналям снизу вверх
заполнить квадратную таблицу порядка n числами 1,2,3... след образом: 11 19 20 24 25 10 12 18 21 23 4 9 13 14 22 3 5 8 14...

Заполнение матрицы змейкой: первый столбец - снизу вверх, второй - сверху вниз
задать матрицу типа: 8 9 24 7 10 23 6 11 22 5 12 21 4 13 20 3 14 19 2 15 18

6
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
23.11.2017, 17:00
Лучший ответ Сообщение было отмечено kekundel как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int summator = 0; // Значения, которые записываем
for(size_t i = 0; i<rows; ++i) // проходим по строкам
{
   size_t current_row = rows -1 -i; // Делаем обратный порядок
   if(i&1) // Если нечётная i
   {
      for (size_t j = 0; j<columns; ++j)
         arr[current_row][columns - 1 - j] = summator++; // справа налево
   }
   else
   {
       for (size_t j = 0; j<columns; ++j)
         arr[current_row][j] = summator++; // слева направо
   }
}
1
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
23.11.2017, 21:40
kekundel, здравствуйте! Вот еще:

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
#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    int m, snake, i, j;
    cout << "Enter a matrix size:" << "\n";
    cout << "m = ";
    cin >> m;
    int arr[m][m];
    i = m - 1;
    snake = 0;
    j = -1;
    do
    {
        while (j < m - 1)
        {
            arr[i][j+1] = snake;
            j++;
            snake++;
        }
        if (snake == m * m - 1)
            break;
        i--;
        while (j >= 0)
        {
            arr[i][j] = snake;
            j--;
            snake++;
        }
        i--;
    } while (snake < m * m - 1);
    cout << "Target matrix:" << "\n";
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < m; j++)
        {
            cout.width(3);
            cout << arr[i][j] << " ";
        }
        cout << "\n";
    }
    system("pause");
    return 0;
}
0
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
26.11.2017, 16:29
Цитата Сообщение от Fixer_84 Посмотреть сообщение
int m, snake, i, j;
...
int arr[m][m];
WUT?
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
26.11.2017, 16:56
New man, здравствуйте! Вот решение, которое прошло все тесты:

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
#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    int N, M, i, snake = 0;
    cin >> N >> M;
    int** A = new int*[N];
    for (int i = 0; i < N; i++)
    {
        A[i] = new int[M];
    }
    i = N - 1;
    do
    {
        for (int j = 0; j < M; j++)
        {
            A[i][j] = snake++;
        }
        if (i == 0) break;
        i--;
        for (int j = M - 1; j >= 0; j--)
        {
            A[i][j] = snake++;
        }
        i--;
    } while (i >= 0);
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
        {
            cout.width(3);
            cout << A[i][j] << " ";
        }
        cout << "\n";
    }
    for (int i = 0; i < N; i++)
    {
        delete [] A[i];
    }
    delete [] A;
    system("pause");
    return 0;
}
0
 Аватар для LVV
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
26.11.2017, 17:37
Лучший ответ Сообщение было отмечено kekundel как решение

Решение

До чего же у Вас всё запутано, господа...
Вот, по-моему, самое понятное решение, и к тому же логика понятна для любой змейки (хоть снизу вверх, хоть сверху -вниз, хоть слева-направо, хоть справа-налево)
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
#include <iostream>
#include <iomanip>
using namespace std;
 
int main()
{
    const int m = 5;//здесь можно заменить вводом с консоли
    int arr[m][m];//здесь можно заменить созданием динамического массива
 
    int n=0;
        for (int i = m - 1; i >= 0; i--)// заполняем строки снизу вверх
        {
            if (i % 2 == 0)//если строка четная (индекс), заполняем её слева-направо
                for (int j = 0; j < m; j++)
                        arr[i][j] = n++;
                else //иначе заполняем строку справа -налево
                    for (int j = m-1; j >=0; j--)
                        arr[i][j] = n++;
        }
 
        //форматированный вывод
        for (int i = 0; i < m; i++)
        {
            for (int j = 0; j < m; j++)
            {
                cout << setw(3) << arr[i][j];
            }
            cout << endl;
        }
return 0;
}
0
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
26.11.2017, 18:26
Fixer_84, да не, я не про это.
Моё решение тоже все тесты пройдёт.

Я вообще о том, что нельзя размер массива на стеке задавать переменной.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.11.2017, 18:26
Помогаю со студенческими работами здесь

Напечатать элементы заданной матрицы змейкой снизу вверх
Напечатать элементы заданной матрицы А(10,10) в следующем порядке:

Заполнение матрицы змейкой: первый столбец - вверх, второй - вниз
Заполнить массив A(n*m) числами от 1 до n*m змейкой по схеме (Городская олимпиада 2002)

Заполнение матрицы змейкой: нечетные столбцы вниз, четные - вверх
заполнить двумерный массив m и n змейкой последовательно натуральными числами,начиная с 1,с левого верхнего угла.Сначала заполнить первый...

Заполнение матрицы змейкой: первый столбец - вниз, второй - вверх
4. Заполнить таблицу размером 4 x 4 «змейкой» . В таблице отсутствуют фиксированные строка и столбец. Заполнение таблицы выполнить по...

Заполнить двухмерный массив змейкой снизу вверх
как изменить этот код, чтобы заполнение змейкой было не снизу вверх, а сверху вниз? var a:array of integer; ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru