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

Заполнить квадратную матрицу змейкой

22.08.2016, 17:38. Показов 7233. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задано число N. Заполните квадратную матрицу NxN числами от 1 до N^2 “змейкой”, как показано в примере.

4

1 8 9 16
2 7 10 15
3 6 11 14
4 5 12 13
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.08.2016, 17:38
Ответы с готовыми решениями:

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

Заполнить квадратную матрицу 10 на 10 змейкой
заполнить квадратную матрицу 10 на 10 змейкой С++ вот так: 91 92 93 94...98 99 100 90 89 88 87...83 82 81 . . . 11 12 13...

Двухмерный массив (заполнить змейкой квадратную матрицу)
Требуется заполнить змейкой квадратную матрицу так, как показано на рисунке справа: заполнение происходит с единицы из левого верхнего угла...

19
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
22.08.2016, 17:41
заполнить числами по порядку и транспонировать?
0
0 / 0 / 0
Регистрация: 04.08.2016
Сообщений: 79
22.08.2016, 17:53  [ТС]
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
заполнить числами по порядку и транспонировать?
т.е. вывести на экран ??? да...
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
22.08.2016, 18:07
Realmucho, забудь о моих словах, транспонировать не нужно
0
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
22.08.2016, 18:19
Realmucho,
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
#include <iostream>
 
int main()
{
    const int size = 5;
    int a[size][size];
    bool up = false;
    
    int value = 1;
    for(int i = 0; i < size; ++i) {
        for(int j = 0; j < size; ++j) {
            if(!up)a[j][i] = value++;
            else  a[size - j - 1][i] = value++;
        }
        up = !up;
    }
    
    for(int i = 0; i < size; ++i) {
        for(int j = 0; j < size; ++j)
            std::cout << a[i][j] << " ";
        std::cout << std::endl;
    }
    
}
2
6 / 6 / 1
Регистрация: 13.01.2016
Сообщений: 46
22.08.2016, 23:12
Цитата Сообщение от obivan Посмотреть сообщение
C++
1
2
if(!up)a[j][i] = value++;
else  a[size - j - 1][i] = value++;
можешь объяснить логику?
p.s. всё работает, догнать не могу что ты тут делаешь
0
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
23.08.2016, 00:13
Цитата Сообщение от He11scream Посмотреть сообщение
можешь объяснить логику?
у нас есть переменная up которая отвечает за то заполняем ли мы столбик с верху внизу или снизу вверх и после каждого заполнения столбца мы ее меняем т.е сначала заполняем с вверху вниз потом с низу вверх
0
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
23.08.2016, 02:16
Как вариант:
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
#include <iostream>
using namespace std;
 
int main() {
    const int N = 5;
    int matrix[N][N];
    int i = 0;// строка
    int j = 0;// столбец
    for(int n=0;n<N*N;n++)
    {
        if(j%2==0)
        {//чётный столбец, идём вверх
            if(i>=N)//вышли за пределы
            {
                j++;
                i = N-1;
                n--;
                continue;
            }
            matrix[i][j] = n;
            i++;
        }
        else
        {//нечётный - вниз
            if(i<0)//вышли за пределы
            {
                j++;
                i = 0;
                n--;
                continue;
            }
            matrix[i][j] = n;
            i--;
        }
    }
    
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<N;j++)
        {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }
    
    return 0;
}
Добавлено через 6 минут
Или так:
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
#include <iostream>
using namespace std;
 
int main() {
    const int N = 4;
    int matrix[N][N];
    
    for(int i=0;i<N;i+=2)
    {
        for(int j=0;j<N;j++)
        {//идём вверх
            matrix[j][i] = j+i*N;//вычисляем значение для данного индекса
        }
    }
    for(int i=1;i<N;i+=2)
    {
        for(int j=N-1;j>=0;j--)
        {//идём вниз
            matrix[j][i] = (N-j-1)+i*N;
        }
    }
    
    
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<N;j++)
        {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }
    
    return 0;
}
1
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
23.08.2016, 04:34
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
//Задано число N. Заполните квадратную матрицу NxN числами
//от 1 до N^2 “змейкой”, как показано в примере.
 
//4
 
//1 8 9 16
//2 7 10 15
//3 6 11 14
//4 5 12 13
///////////////////////////////////////////////////////////////////////////////
#include <iostream>
///////////////////////////////////////////////////////////////////////////////
int     snake_j
    (
        int     k,
        int     matr_dim
    )
{
    return  k   /   matr_dim;
}
///////////////////////////////////////////////////////////////////////////////
int     snake_i
    (
        int     k,
        int     matr_dim,
        int     j
    )
{
    int     i   =   k   %   matr_dim;
 
    if( j % 2 )
    {
        i   =       matr_dim
                -   1
                -   i;
    }
 
    return  i;
}
///////////////////////////////////////////////////////////////////////////////
template < typename     T_matr >
void    fill_matr_with_snake
    (
        T_matr  &   matr,
        int         matr_dim
    )
{
    for( int  k{}; k < matr_dim * matr_dim; ++k )
    {
        int     j       =   snake_j( k,     matr_dim        );
        int     i       =   snake_i( k,     matr_dim,   j   );
        matr    [i][j]  =   k + 1;
    }
}
///////////////////////////////////////////////////////////////////////////////
template < typename     T_matr >
void    print_matr
    (
        T_matr  &   matr,
        int         matr_dim
    )
{
    for( int  i{}; i < matr_dim; ++i )
    {
        for( int  j{}; j < matr_dim; ++j )
        {
            std::cout   <<  matr[i][j]
                        <<  '\t';
        }//for
 
        std::cout   <<  std::endl;
    }//for
 
    std::cout   <<  std::endl;
}
///////////////////////////////////////////////////////////////////////////////
int     main()
{
    const   int     MATR_DIM_MAX    {10};
    int             matr_dim        {};
 
    do
    {
        std::cout   <<  "matr dim (<= "
                    <<  MATR_DIM_MAX
                    <<  "): ";
 
        std::cin    >>  matr_dim;
    }
    while   (
                    matr_dim
                >   MATR_DIM_MAX
            );
 
    int     matr    [MATR_DIM_MAX]
                    [MATR_DIM_MAX];
 
    fill_matr_with_snake    ( matr,     matr_dim );
    print_matr              ( matr,     matr_dim );
}
1
6 / 6 / 1
Регистрация: 13.01.2016
Сообщений: 46
23.08.2016, 09:45
Цитата Сообщение от obivan Посмотреть сообщение
у нас есть переменная up которая отвечает за то заполняем ли мы столбик с верху внизу или снизу вверх и после каждого заполнения столбца мы ее меняем т.е сначала заполняем с вверху вниз потом с низу вверх
понял, спасибо
0
0 / 0 / 0
Регистрация: 04.08.2016
Сообщений: 79
25.08.2016, 18:11  [ТС]
ребята мне надо самому вводить цифру N, и надо чтоб змейка началась с цифры 1, а у вас всех начинается с 0, я немножко изменил код, но что то не работает, может поможете разобраться ??

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
#include <iostream>
using namespace std;
 
int main() {
    
    int N;
    int matrix[N][N];
        cin >> N;
    for (int i = 0; i<N; i += 2)
    {
        for (int j = 0; j<N; j++)
        {//идём вверх
            matrix[j][i] = j + i*N;//вычисляем значение для данного индекса
        }
    }
    for (int i = 1; i<N; i += 2)
    {
        for (int j = N - 1; j >= 0; j--)
        {//идём вниз
            matrix[j][i] = (N - j - 1) + i*N;
        }
    }
 
 
    for (int i = 0; i<N; i++)
    {
        for (int j = 0; j<N; j++)
        {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }
 
    return 0;
}
0
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
25.08.2016, 18:24
Realmucho,
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
#include <iostream>
using namespace std;
 
int main() {
    
    int N;
    cin >> N;
    
    int **matrix = new int*[N];
    for(int i = 0; i < N; ++i)
        matrix[i] = new int[N];
    
    for (int i = 0; i<N; i += 2)
    {
        for (int j = 0; j<N; j++)
        {//идём вверх
            matrix[j][i] = j + i*N;//вычисляем значение для данного индекса
        }
    }
    for (int i = 1; i<N; i += 2)
    {
        for (int j = N - 1; j >= 0; j--)
        {//идём вниз
            matrix[j][i] = (N - j - 1) + i*N;
        }
    }
 
 
    for (int i = 0; i<N; i++)
    {
        for (int j = 0; j<N; j++)
        {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }
     
    for(int i = 0; i < N; ++i)
        delete[] matrix[i];
    delete[] matrix;
    
    return 0;
}
0
0 / 0 / 0
Регистрация: 04.08.2016
Сообщений: 79
26.08.2016, 16:39  [ТС]
Цитата Сообщение от obivan Посмотреть сообщение
int **matrix = new int*[N];
а эту строку чем можно заменить, чтоб без звездочек было ???
0
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
26.08.2016, 16:44
Realmucho, если вы вводить размер собирааетесь то ничем
0
0 / 0 / 0
Регистрация: 04.08.2016
Сообщений: 79
26.08.2016, 16:49  [ТС]
я просто хочу написать иными словами, без звездочек, потому что такое не проходили и использовать нельзя...
можете подсказать что можно вместо этого написать ???
0
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
26.08.2016, 17:07
Realmucho, ну тогда сделайте очень большой массив, потом вводите n меньше чем размер массива т.е меньше 100 и все
C++
1
2
3
int A[100][100];
int n;
cin >> n;
1
0 / 0 / 0
Регистрация: 04.08.2016
Сообщений: 79
26.08.2016, 17:23  [ТС]
вот так работает, но так начинает писать с нуля, а как сделать чтоб начал с 1 ???

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
#include <iostream>
using namespace std;
 
int main() {
 
    int matrix[100][100];
    int N;
    cin >> N;
    
    for (int i = 0; i<N; ++и)
    {
        for (int j = 0; j<N; j++)
        {//идём вверх
            matrix[j][i] = j + i*N;//вычисляем значение для данного индекса
        }
    }
    for (int i = 1; i<N; i += 2)
    {
        for (int j = N - 1; j >= 0; j--)
        {//идём вниз
            matrix[j][i] = (N - j - 1) + i*N;
        }
    }
 
 
    for (int i = 0; i<N; i++)
    {
        for (int j = 0; j<N; j++)
        {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}
0
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
26.08.2016, 17:24
Realmucho, дописать + 1 ?

Добавлено через 30 секунд
в 21 и 14 строах
1
0 / 0 / 0
Регистрация: 04.08.2016
Сообщений: 79
26.08.2016, 18:07  [ТС]
спасибо большое..все получилось

Добавлено через 37 минут
ну вот еще одна маленькая проблема, вначале пишет лишний пробел, как это исправить ??? пробовал fill setw setright но не получается

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
#include <iostream>
#include <iomanip>
 
int main() {
 
    int matrix[100][100];
    int N;
    std::cin >> N;
 
    for (int i = 0; i<N; ++i)
    {
        for (int j = 0; j<N; ++j)
        {
            matrix[j][i] = j + i*N + 1;
        }
    }
    for (int i = 1; i < N; i += 2)
    {
        for (int j = N - 1; j >= 0; --j)
        {
            matrix[j][i] = (N - j - 1) + i*N + 1;
        }
    }
    for (int i = 0; i<N; ++i)
    {
        for (int j = 0; j<N; ++j)
        {
            std::cout << std::right << std::setw(2) << matrix[i][j] << " ";
        }
        std::cout << "\n";
    }
 
    return 0;
}
0
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
26.08.2016, 18:18
Цитата Сообщение от Realmucho Посмотреть сообщение
C++
1
std::setw(2)
эта функция скажем так резирвирует под ваше число 2е ячейки места в консоле, а используете вы только одну, потому что 1,2,3 и тд. состоят из 1 цифры, если вам это так сильно режет глаза то просто уберите setw
будет примерно так
Цитата Сообщение от Realmucho Посмотреть сообщение
C++
1
std::cout << std::right  << matrix[i][j] << " ";
Если что строка номер 28
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.08.2016, 18:18
Помогаю со студенческими работами здесь

Требуется заполнить змейкой квадратную матрицу так, как показано на рисунке
Требуется заполнить змейкой квадратную матрицу так, как показано на рисунке справа: заполнение происходит с единицы из левого верхнего угла...

Заполнить квадратную матрицу змейкой по диагонали, начиная с элемента matrix[size-1][size-1]
Требуется написать программу, которая заполняет массив размерности n*n по заданному правилу: 25 23 22 16 15 24 ...

Заполнить матрицу змейкой
Напишите программу, которая заполняет матрицу из N строк и M столбцов натуральными числами змейкой, как показано в примере. Входные...

Заполнить матрицу змейкой
Нужно заполнить квадратный двухмерный масив змейкой и вывести. 1 2 3 6 5 4 7 8 9

Заполнить матрицу змейкой
1 8 9 16 2 7 10 16 3 6 11 14 4 5 12 13


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru