| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > [C++]Задача с массивами |
| Автор: Bobrina 19.12.2011, 23:05 |
| Текст задачи: "Составить функцию, которая, получив два массива, определяет, равны ли они. Два массива будем считать равными, если они содержат одинаковые числа. Используя эту функцию решить следующую задачу: Даны три массива действительных чисел. Если эти три массива равны между собой, создать новый массив, все элементы которого равны утроенным элементам одного из них, в противном случае создать массив, склеив все три исходных массива в порядке 1, 2 и 3." Собственно не могу составить функцию проверки массивов на равенство. Проблема в том, что по словам преподавателя, два массива равны когда в них содержатся одни и те же числа в любом порядке, т.е. {1,2,3} и {3,2,1} - одинаковые. Сначала отсортировать массивы, а потом сравнить соответствующие элементы нельзя, ибо массивы будут использоваться после проверки. Создавать дополнительные массивы и сортировать и анализировать их тоже нельзя, т.к. нерационально. Брать элемент одного массива, и просто искать его во втором тоже не получится, тогда {7,7,7} и {1,1,7} получатся равными. Видимо надо делать какой-то флажок для элементов, которые уже мы "использовали" во втором массиве. Но боюсь опять придерутся что будет нерационально. Посоветуйте что-нибудь, пожалуйста. |
| Автор: bobik02 20.12.2011, 00:40 |
| Тут бы наверное очень пригодился мат. анализ (задачи оптимизации). Интересная задчка. |
| Автор: Bobrina 20.12.2011, 19:50 |
| Да вот очень даже интересная, настолько что никак не могу придумать как же её сделать. |
| Автор: Dov 20.12.2011, 23:30 | ||
Разве что, пройтись XOR`ом по массивам...
|
| Автор: Dov 21.12.2011, 07:35 | ||
volatile, а это никто и не утверждает. А ты пробовал? Там, выше, функция есть для проверки "на равенство" любых двух массивов. Имеется ввиду "равенство", данное по условию задачи, т.е. когда в массивах находятся одинаковые значения, но в разном порядке. |
| Автор: Bobrina 21.12.2011, 22:53 |
| Спасибо большое, вроде с преподователем сошлись на том, что будем считать что они должны состоять из одинаковых элементов на любых местах и в любом количестве. Т.е. {7,7,1} {7,1,1} {7,1,1} - все равны. Проверяю это проверкой чтобы все числа из первого были во втором, а потом наоборот, числа из второго в первом. |
| Автор: volatile 21.12.2011, 23:26 | ||||
да я пробовал http://liveworkspace.org/code/bcf5f06dbed0b7795444eba7a1dd7f06
а это вообще имеет какой-то смысл? |
| Автор: Dov 22.12.2011, 08:57 |
Да, ошибочка вышла... Видно они тренируются в работе с массивами. |
| Автор: Bobrina 22.12.2011, 09:07 |
Даже не подозреваю, единственный смысл - сдать лабораторную преподавателю. Совершенно верно. |
| Автор: volatile 22.12.2011, 23:36 | ||
Вот уважаю таких людей!
Что интересно, я даже в этом случае не вижу быстрого алгоритма. Ваш способ имеет сложность N^2 сортировка и то быстрее. (нормальная сортировка N*logN) Впрочем, если главная цель и этого преподавателя удовлетворил этот способ, то пусть будет так... Добавлено через 11 минут и 49 секунд хотя есть способ быстрее, но нужна доп. память... |