Войти

Показать полную графическую версию : ссылки


farik
19-12-2005, 22:36
Ребята помогите пожалуста,то я чето не пойму:


Даны два массива : А[n] и B[m]. Необходимо создать третий массив, в котором нужно собрать:
Элементы обоих массивов;


Общие элементы двух массивов;
Элементы массива A, которые не включаются в B;
Элементы массива B, которые не включаются в A;
Элементы массивов A и B, коотрые не являются общими дял них (то есть объединение результатов двух предыдущих вариантов).

Огромное спасибо!!!!

pva
21-12-2005, 15:09
На C++, я бы посоветовал сначала отсортировать A и B (если это массивы):

std::vector<double> A, B;
// ... fill someway

std::vector<double> a1(A), b1(B);
std::sort(a1.begin(), a1.end());
std::sort(b1.begin(), b1.end());

дальше используются алгоритмы на сортированных списках (unique, merge и др.). К сожалению, у меня нет под рукой справочника, поэтому конкретно не пишу.

Если память позволяет, а вместо double используется что-то более тяжёлое, то лучше воспользоваться шаблоном set.
Там все нужные функции есть.

pva
22-12-2005, 13:12
Обнаружил хелп:

std::vector in_both(std::min(a.size(), b.size()));
in_both.erase(std::set_intersection(a.begin(), a.end(), b.begin(), b.end(), in_both.begin()));

std::vector not_in_a(b.size());
not_in_b.erase(std::set_difference(b.begin(), b.end(), a.begin(), a.end(), not_in_a.begin()));

std::vector not_in_b(a.size());
not_in_b.erase(std::set_difference(a.begin(), a.end(), b.begin(), b.end(), not_in_b.begin()));

std::vector not_in_both(not_in_a);
not_in_both.insert(not_in_b.begin(), not_in_b.end());

Для справедливости, все результаты можно отсортировать и пропустить через unique.




© OSzone.net 2001-2012