Это нужно сделать с помощью массивов.
так вот, имеется два равных по длинне массива 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. Плюс у вас получается не "возрастающий", а "не убывающий" массив. А за счет того, что у вас массивы возрастающие - просто берете и заносите в последний элемент массива Це минимум из текущего места массива А или Б, продвигая указатель в нем (в масиве А или Б, конечно) на один вперед.
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. Плюс у вас получается не "возрастающий", а "не убывающий" массив. А за счет того, что у вас массивы возрастающие - просто берете и заносите в последний элемент массива Це минимум из текущего места массива А или Б, продвигая указатель в нем (в масиве А или Б, конечно) на один вперед.
Похожие вопросы
- Помогите написать программу со switch в СИ
- помогите написать простые программы на Qbasic
- Помогите написать пару программ на СИ
- помогите написать программу на Delphi
- Помогите написать программу на С. Тема Составление программ с использованием массивов
- Помогите написать программу на Visual Basic (найти ошибку)
- Помогите написать программу на ассемблере, завтра экзамен а я в нём совсем не шарю.
- Помогите написать код на C++
- помогите написать програмку (Pascal)!)
- Помогите написать 2 програмки на Турбо Паскале.