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

Сколько одинаковых элементов в матрицах

20.10.2021, 02:28. Показов 627. Ответов 3
Метки c++ (Все метки)

Студворк — интернет-сервис помощи студентам
Определить, сколько одинаковых элементов имеют данные две
матрицы c++. Заранее благодарю за ответ.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.10.2021, 02:28
Ответы с готовыми решениями:

Функция проверки наличия в матрицах 2 одинаковых элементов
Задано матрицы Z,V,G розмерностью (3х4). Написать схему алгоритма и программу, в которой при помощи функции придать значение True , если в...

Найти в двух матрицах два одинаковых числа
Даны матрицы целых чисел S, K, в которых имеется по два одинаковых числа. Найти и напечатать их значения и индексы.

Посчитать сколько одинаковых элементов в ArrayList
Есть массив ArrayList, в который могут вноситься различные названия операционных систем. Причем, какие именно заранее не известно. ...

3
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
20.10.2021, 10:02
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
#include <ctime>
#include <cmath>
#include <iostream>
#include <iomanip>
#include <unordered_set>
#include <algorithm>
 
template<typename T, std::size_t HEIGHT, std::size_t WIDTH>
std::ostream &operator<<(std::ostream &out, const T (&a)[HEIGHT][WIDTH]) {
    for (std::size_t i = 0; i < HEIGHT; ++i) {
        for (std::size_t j = 0; j < WIDTH; ++j) {
            out << std::setw(4) << a[i][j];
        }
        out << std::endl;
    }
    return out;
}
 
template<typename T, std::size_t HEIGHT, std::size_t WIDTH, class Generator>
Generator &operator>>(Generator &g, T (&a)[HEIGHT][WIDTH]) {
    for (std::size_t i = 0; i < HEIGHT; ++i) {
        for (std::size_t j = 0; j < WIDTH; ++j) {
            a[i][j] = g();
        }
    }
    return g;
}
 
template<typename T, std::size_t HEIGHT, std::size_t WIDTH>
std::unordered_set<T> get_elements(const T (&a)[HEIGHT][WIDTH]) {
    std::unordered_set<T> result;
    for (std::size_t i = 0; i < HEIGHT; ++i) {
        for (std::size_t j = 0; j < WIDTH; ++j) {
            result.insert(a[i][j]);
        }
    }
    return result;
}
 
template<typename T>
std::ostream &operator<<(std::ostream &out, const std::unordered_set<T> &v) {
    for (auto &i : v) {
        out << std::setw(4) << i;
    }
    return out;
}
 
template<typename T>
std::unordered_set<T> intersection(const std::unordered_set<T> &a, const std::unordered_set<T> &b) {
    std::unordered_set<T> result;
    for (auto i : a) {
        if (b.find(i) != b.end()) {
            result.insert(i);
        }
    }
    return result;
}
 
int main() {
    std::srand(std::time(nullptr));
    auto generator = []() { return rand() % 21 - 10; };
    int a[5][7];
    int b[4][3];
    generator >> a >> b;
    auto numbers_a = get_elements(a);
    auto numbers_b = get_elements(b);
    std::cout << "Matrix a: " << std::endl << a << std::endl << "Values: " << numbers_a << std::endl << std::endl
              << "Matrix b: " << std::endl << b << std::endl << "Values: " << numbers_b << std::endl << std::endl;
    auto result = intersection(numbers_a, numbers_b);
    std::cout << "Common values: " << result;
}
0
0 / 0 / 0
Регистрация: 20.10.2021
Сообщений: 2
20.10.2021, 14:54  [ТС]
Код сложноват, можно пожалуйста объяснение где и какое именно действие выполняется.
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
20.10.2021, 19:18
Сложноват?! Вы предполагали, что вам напишут пару строк и вы всё поймете?
У меня нет столько времени, чтоб вам расписать всё, что тут происходит.

Если вкратце.

По алгоритму.
Для того, чтобы сложность алгоритма была линейной (O(N)), в коде из каждой матрицы за один проход создается два множества на основе хэштаблицы со сложностью поиска O(C), а потом за O(N) находится их пересечение, что и будет решением -- списком одинаковых элементов.

По организации кода.

template<typename T, std::size_t HEIGHT, std::size_t WIDTH>
std::ostream &operator<<(std::ostream &out, const T (&a)[HEIGHT][WIDTH])
: оператор (функция) вывода матрицы размером HEIGHT x WIDTH на поток вывода (на экран).

template<typename T, std::size_t HEIGHT, std::size_t WIDTH, class Generator>
Generator &operator>>(Generator &g, T (&a)[HEIGHT][WIDTH])
: оператор (функция) заполнения матрицы a размером HEIGHT x WIDTH значениями из генератора g.

template<typename T, std::size_t HEIGHT, std::size_t WIDTH>
std::unordered_set<T> get_elements(const T (&a)[HEIGHT][WIDTH])
: функция, принимающая матрицу а и возвращающая множество в виде хэш-таблицы, содержащее все значения из этой матрицы.

template<typename T>
std::ostream &operator<<(std::ostream &out, const std::unordered_set<T> &v)
: оператор (функция) вывода множества на поток вывода (на экран)

template<typename T>
std::unordered_set<T> intersection(const std::unordered_set<T> &a, const std::unordered_set<T> &b)
: функция, которая ищет и возвращает пересечение двух множеств представленных в виде хэш-таблицы.

Не по теме:

Очевидно, что если нужно вывести именно количество -- можно поменять вывод result на вывод result.size().



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

Если элементы, стоящие на одинаковых позициях в матрицах, равны – поместить их в новую матрицу
помогите пожалуйстас с прогой... 7. Даны четыре матрицы размера m*n. Если элементы, стоящие на оди-наковых позициях в этих матрицах,...

Проверить, сколько в динамическом списке одинаковых элементов
Помогите пожалуйста создать процедуру или функцию, которая проверяет, сколько в динамическом списке одинаковых элементов и в результате...

Определить сколько в массиве пар одинаковых элементов
То что получилось. #include &lt;iostream&gt; #include &lt;ctime&gt; using namespace std; int main() { srand...

Найти, сколько в массиве пар одинаковых соседних элементов
1. Напишите программу, в которой создается массив чисел. Найти, сколько в нем пар одинаковых соседних элементов.

Подсчитать сколько одинаковых элементов имеют два множества А и В.
Подсчитать сколько одинаковых элементов имеют два множества А и В.


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
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
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru