Другие языки программирования и технологии

Помогите написать сложение множеств в С++

Это нужно сделать с помощью массивов.
так вот, имеется два равных по длинне массива A и B рандомных возрастающих чисел от 0 до 100. нужно сгенерировать массив С равный сумме этих массивов, тобишь сложить эти два множества. при этом нужно учесть, что в массивах могут быть одинаковые элементы и в конечный массив такие элементы заносятся в единственном числе, что меняет его длину. В массиве С ненужно располагать элементы по возрастанию.
вот программный код, что у меня получился, но всё равно работает криво, если сталкивается с пересечением множеств больше 1 раза. уже часа 3 бьюсь. помогите
http://pastebin.com/1zfVthcB
Почему у вас так странно задаются случайные числа:
a[ i ]=a[ i-1 ]+rand() ;
Это неправильно. Правильно a[ i ] = random(100);

Во внутреннем цикле непонятно, почему элементы заносятся в первый массив, а не в третий (С) .
z++; // Убрать
a[ i ]=-a[ i ]; // И вот это для меня вообще загадка - зачем менять знак? Если тут надо писать в элемент c[ z++ ].

Последний вложенный цикл меня вообще поразил. Я просто не понимаю, что там происходит.

Вы лучше прочитайте все элементы по очереди из первого (к примеру) массива, и во временном массиве в 100 элементов (ну максимум вашего рандома) установите флаг 1 для каждого числа. Потом тоже самое со вторым массивом. Итого, у вас массив (1,2,5,5) + (1,1,5,5) превратится в (1,1,0,0,1). Перебираете его элементы - и вуаля, получаете сумму множеств без повторений. А

УПД: Не прочитал, тогда да, все почти верно, за исключением того, что на 6 итерации у вас числа вполне вероятно начнут выходить за границу 100. Плюс у вас получается не "возрастающий", а "не убывающий" массив. А за счет того, что у вас массивы возрастающие - просто берете и заносите в последний элемент массива Це минимум из текущего места массива А или Б, продвигая указатель в нем (в масиве А или Б, конечно) на один вперед.
ВМ
Владимир Манчук
34 701
Лучший ответ