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

(C++) Задана целочисленная матрица размером N×M. Упорядочить элементы матрицы по возрастанию в форме спирали

10.03.2019, 21:25. Показов 2020. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задана целочисленная матрица размером N×M. Упорядочить элементы матрицы по возрастанию в форме спирали
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.03.2019, 21:25
Ответы с готовыми решениями:

Задана целочисленная матрица размером N×M. Заменить все отрицательные элементы матрицы на нули
Задана целочисленная матрица размером N×M. Заменить все отрицательные элементы матрицы на нули.

3. Задана матрица V(7, 8). Упорядочить по возрастанию элементы каждой строки матрицы. Диапазон [-20; 20]
Задана матрица V(7, 8). Упорядочить по возрастанию элементы каждой строки матрицы. Диапазон ....

Задана матрица размером N×M, N,M<50. Получить массив B, присвоив его k-му элементу значение 0, если все элементы k-го ст
Задана матрица размером N×M, N,M&lt;50. Получить массив B, присвоив его k-му элементу значение 0, если...

Задана матрица M(N,M) Упорядочить по возрастанию элементы каждой строки N<=10 M,=15
Очень нужно,пожалуйста. Добавлено через 57 секунд Помогите

3
0 / 0 / 0
Регистрация: 21.02.2019
Сообщений: 18
11.03.2019, 23:24  [ТС] 2
(C++) Задана целочисленная матрица размером N×M. Упорядочить элементы матрицы по возрастанию в форме спирали. Пример :
Миниатюры
(C++) Задана целочисленная матрица размером N×M. Упорядочить элементы матрицы по возрастанию в форме спирали  
0
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
11.03.2019, 23:27 3
Лучший ответ Сообщение было отмечено Hy_privet как решение

Решение

Как-то так, наверное.
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
113
114
115
116
117
118
119
120
#include <algorithm>
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <utility>
 
template <typename T>
using Row = std::vector<T>;
 
template <typename T>
using Matrix = std::vector<Row<T>>;
 
template <typename T>
class SpirallAccess {
    Matrix<T> &m_matrix;
    std::vector<std::pair<size_t, size_t>> m_pos_list;
 
public:
    SpirallAccess(Matrix<T> &matrix):
        m_matrix(matrix)
    {
        size_t top = 0;
        size_t left = 0;
        size_t bottom = matrix.size();
        size_t right = matrix[0].size();
 
        size_t i = 0;
        size_t j = 0;
 
        while ((left < right) && (top < bottom)) {
            while (i + 1 < bottom) {
                m_pos_list.push_back({i, j});
                ++i;
            }
 
            if (++left == right) break;
 
            while (j + 1 < right) {
                m_pos_list.push_back({i, j});
                ++j;
            }
 
            if (--bottom == top) break;
 
            while (i > top) {
                m_pos_list.push_back({i, j});
                --i;
            }
 
            if (--right == left) break;
 
            while (j > left) {
                m_pos_list.push_back({i, j});
                --j;
            }
 
            if (++top == bottom) break;
        }
 
        m_pos_list.push_back({i, j});
    }
 
    T &operator[](size_t n) {
        return m_matrix[m_pos_list[n].first][m_pos_list[n].second];
    }
 
    size_t size() const {
        return m_pos_list.size();
    }
};
 
template <typename T>
std::string matrixToString(const Matrix<T> &matrix, unsigned field_width = 6) {
    std::stringstream ss;
    for (auto &row : matrix) {
        for (auto &x : row) {
            ss.width(field_width);
            ss << x;
        }
 
        ss << std::endl;
    }
 
    return ss.str();
}
 
template <typename ArrayType>
void bubbleSort(ArrayType &arr) {
    for (size_t i = 0; i < arr.size(); ++i) {
        for (size_t j = 0; j < arr.size() - i - 1; ++j) {
            if (arr[j] > arr[j + 1]) {
                std::swap(arr[j], arr[j + 1]);
            }
        }
    }
}
 
using namespace std;
 
int main() {
    size_t m, n;
    cin >> m >> n;
 
    int counter = 1;
    auto matrix = Matrix<int>(m, Row<int>(n));
    for (auto &row : matrix) {
        for (auto &x : row) {
            x = counter++;
        }
    }
 
    auto spiral_access = SpirallAccess<int>(matrix);
 
    cout << matrixToString(matrix) << endl;
    bubbleSort(spiral_access);
    cout << matrixToString(matrix) << endl;
 
    return 0;
}
1
330 / 145 / 56
Регистрация: 17.10.2015
Сообщений: 580
12.03.2019, 00:53 4
Наработки какие-то есть или идеи?
0
12.03.2019, 00:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.03.2019, 00:53
Помогаю со студенческими работами здесь

Задана матрица A(3,5) Упорядочить по возрастанию элементы той строки,
где находится наибольший элемент матрицы. Полученную матрицу напечатать по строкам.( Целый день...

(C) Задана целочисленная матрица размера N×M
Задана целочисленная матрица размера N×M. Определить количество столбцов матрицы похожих на первый...

Задана вещественная прямоугольная матрица. Упорядочить по возрастанию элементы каждой ее строки
Задана вещественная прямоугольная матрица. Упорядочить по возрастанию элементы каждой ее строки.

Упорядочить по возрастанию элементы каждой строки матрицы размером n X m
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;conio.h&gt; using namespace...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru