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

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

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

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

4

1 8 9 16
2 7 10 15
3 6 11 14
4 5 12 13
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.08.2016, 17:38
Ответы с готовыми решениями:

Заполнить квадратную матрицу змейкой
заполнить квадратную матрицу NxN змейкой С++ вот так: 25 24 23 22 21 16 17 18 19 20 15 14 13...

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

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

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

19
806 / 533 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
22.08.2016, 17:41 2
заполнить числами по порядку и транспонировать?
0
0 / 0 / 0
Регистрация: 04.08.2016
Сообщений: 79
22.08.2016, 17:53  [ТС] 3
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
заполнить числами по порядку и транспонировать?
т.е. вывести на экран ??? да...
0
806 / 533 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
22.08.2016, 18:07 4
Realmucho, забудь о моих словах, транспонировать не нужно
0
Падаван С++
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
22.08.2016, 18:19 5
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 6
Цитата Сообщение от obivan Посмотреть сообщение
C++
1
2
if(!up)a[j][i] = value++;
else  a[size - j - 1][i] = value++;
можешь объяснить логику?
p.s. всё работает, догнать не могу что ты тут делаешь
0
Падаван С++
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
23.08.2016, 00:13 7
Цитата Сообщение от He11scream Посмотреть сообщение
можешь объяснить логику?
у нас есть переменная up которая отвечает за то заполняем ли мы столбик с верху внизу или снизу вверх и после каждого заполнения столбца мы ее меняем т.е сначала заполняем с вверху вниз потом с низу вверх
0
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
23.08.2016, 02:16 8
Как вариант:
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
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
23.08.2016, 04:34 9
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 10
Цитата Сообщение от obivan Посмотреть сообщение
у нас есть переменная up которая отвечает за то заполняем ли мы столбик с верху внизу или снизу вверх и после каждого заполнения столбца мы ее меняем т.е сначала заполняем с вверху вниз потом с низу вверх
понял, спасибо
0
0 / 0 / 0
Регистрация: 04.08.2016
Сообщений: 79
25.08.2016, 18:11  [ТС] 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
Падаван С++
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
25.08.2016, 18:24 12
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  [ТС] 13
Цитата Сообщение от obivan Посмотреть сообщение
int **matrix = new int*[N];
а эту строку чем можно заменить, чтоб без звездочек было ???
0
Падаван С++
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
26.08.2016, 16:44 14
Realmucho, если вы вводить размер собирааетесь то ничем
0
0 / 0 / 0
Регистрация: 04.08.2016
Сообщений: 79
26.08.2016, 16:49  [ТС] 15
я просто хочу написать иными словами, без звездочек, потому что такое не проходили и использовать нельзя...
можете подсказать что можно вместо этого написать ???
0
Падаван С++
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
26.08.2016, 17:07 16
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  [ТС] 17
вот так работает, но так начинает писать с нуля, а как сделать чтоб начал с 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
Падаван С++
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
26.08.2016, 17:24 18
Realmucho, дописать + 1 ?

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

Добавлено через 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
Падаван С++
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
26.08.2016, 18:18 20
Цитата Сообщение от Realmucho Посмотреть сообщение
C++
1
std::setw(2)
эта функция скажем так резирвирует под ваше число 2е ячейки места в консоле, а используете вы только одну, потому что 1,2,3 и тд. состоят из 1 цифры, если вам это так сильно режет глаза то просто уберите setw
будет примерно так
Цитата Сообщение от Realmucho Посмотреть сообщение
C++
1
std::cout << std::right  << matrix[i][j] << " ";
Если что строка номер 28
1
26.08.2016, 18:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.08.2016, 18:18
Помогаю со студенческими работами здесь

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

Заполнить матрицу змейкой
Напишите программу, которая заполняет матрицу из 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
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru