Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
1

Запись чисел первых двух массивов в третий без повторений

26.05.2018, 13:41. Показов 792. Ответов 10

Доброго дня суток всем. В данной проге я не знаю, как учесть условие повтора (если он есть, например, заменить повторяющееся число на ноль). Просьба не ругать меня за то, что я не знаю некоторых вещей, наподобе #include<vector> и т.д.: я новенький в С++.

Задача: Записать числа первых двух массивов в третий без повторений.

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
#include<iostream>
#include<ctime>
#define size 5
using namespace std;
 
void main()
{
    srand(time(0));
    int arr1[5]{ 0 };
    int arr2[5]{ 0 };
    int arr3[10]{ 0 };
    int j = 0;
 
    for (int i = 0; i < 5; i++)
    {
        arr1[i] = rand() % 10;
        cout << "arr1[" << i << "] = " << arr1[i] << endl;
    }
    cout << endl;
 
    for (int i = 0; i < 5; i++)
    {
        arr2[i] = rand() % 10;
        cout << "arr2[" << i << "] = " << arr2[i] << endl;
    }
    cout << endl;
 
    for (int i = 0; i < 10; i++)
    {
        if (i % 2 == 0)
        {
            arr3[i] = arr1[j];
        }
        else if (i % 2 != 0)
        {
            arr3[i] = arr2[j];
        }
        else
            j++;
    }
 
    for (int i = 0; i < 10; i++)
    {
        cout << "arr3[" << i << "] = " << arr3[i] << endl;
    }
    system("pause");
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.05.2018, 13:41
Ответы с готовыми решениями:

Переписать в третий массив общие элементы первых двух массивов без повторений
Даны 2 массива размерности M и N соответственно. Необходимо переписать в третий массив общие...

Необходимо переписать в третий массив общие элементы первых двух массивов без повторений
не выводит 3-й массив..(((( В чем трудность не понимаю.... #include&lt;iostream&gt;...

Объединение двух массивов в третий (без добавления дублирующихся элементов)
Итак, есть нужно объеденить 2 массива в 3й так что бы элементы которые повторяются в обоих массивах...

Cоздать массив минимально возможного размера, поместив в него общие элементы двух исходных массивов без повторений
Добрый день ,я немного запутался в решении. Помогите, если кто понимает, заранее благодарен. Вот...

10
Нарушитель
1490 / 1291 / 486
Регистрация: 16.08.2014
Сообщений: 5,419
Записей в блоге: 1
26.05.2018, 13:53 2
N0VY, не работает или что?
0
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
26.05.2018, 14:14  [ТС] 3
Работает, только я не знаю, как учесть условие, если числа повторяются (нужно записать без повтора). Условия читаем
0
Нарушитель
1490 / 1291 / 486
Регистрация: 16.08.2014
Сообщений: 5,419
Записей в блоге: 1
26.05.2018, 14:36 4
N0VY, как то так, по тестируй я прогнал пару раз вроде работает
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
#include <cstddef>
#include <iostream>
#include <random>
#include <ctime>
 
template<std::size_t s>
bool Check(int (&a)[s], int i)
{
    for (auto& r : a)
        if (r == i) return true;
 
    return false;
}
 
int main()
{
    constexpr std::size_t s1 = 5;
    constexpr std::size_t s2 = 10;
 
    int a1[s1];
    int a2[s1];
    int a3[s2];
 
    static std::default_random_engine rand(std::time(nullptr) );
    std::uniform_int_distribution<> uid(-10, 10);
 
    for (std::size_t i = 0; i < s1; ++i)
    {
        a1[i] = uid(rand);
        a2[i] = uid(rand);
    }
 
    for (std::size_t i = 0, j = 0; i < s1; ++i)
    {
        if (!Check(a3, a1[i] ) ) a3[j++] = a1[i];
        else a3[j++] = 0;
 
        if (!Check(a3, a2[i] ) ) a3[j++] = a2[i];
        else a3[j++] = 0;
    }
 
    return 0;
}
Добавлено через 6 минут
Цитата Сообщение от N0VY Посмотреть сообщение
я новенький в С++
отладчиком же можешь пользоваться, а то результата работы программы не увидишь.
0
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
26.05.2018, 14:45  [ТС] 5
Кхэм... Слишком сложно для новичков. Таких, как я. Отладчиком пользоваться я не умею (и такое бывает, да, да) и я знаю только библиотеки iostream, ctime, iomanip и Windows.h. Про остальные я и поныне не знаю, поэтому, желательно как-то попроще написать. И я просил только условие, не это.
0
Нарушитель
1490 / 1291 / 486
Регистрация: 16.08.2014
Сообщений: 5,419
Записей в блоге: 1
26.05.2018, 14:51 6
Цитата Сообщение от N0VY Посмотреть сообщение
И я просил только условие, не это.
вот условие
C++
1
2
3
4
5
6
7
8
for (std::size_t i = 0, j = 0; i < s1; ++i)
{
      if (!Check(a3, a1[i] ) ) a3[j++] = a1[i];
      else a3[j++] = 0;
 
      if (!Check(a3, a2[i] ) ) a3[j++] = a2[i];
      else a3[j++] = 0;
}
не обязательно понимать весь код, принципы главное уяснить

Добавлено через 1 минуту
суть, то что создаем функцию Check для проверки третьего массива на повторение

Добавлено через 2 минуты
кстати вот полезная ссылка Как пользоваться отладчиком (в Visual Studio)
0
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
26.05.2018, 15:06  [ТС] 7
Спасибо, понятно

Добавлено через 4 минуты
Кстати говоря: что значит это? Я понимаю, что это указатели, но я их не проходил: позже пройдём. Можно как-то без них обойтись?

Цитата Сообщение от _stanislav Посмотреть сообщение
(&a)[s]
Цитата Сообщение от _stanislav Посмотреть сообщение
(auto& r : a)
0
Нарушитель
1490 / 1291 / 486
Регистрация: 16.08.2014
Сообщений: 5,419
Записей в блоге: 1
26.05.2018, 15:17 8
N0VY,
C++
1
2
3
4
5
6
7
bool Check(int a[], std::size_t s, int i)
{
    for (std::size_t j = 0; j < s; ++j)
        if (a[j] == i) return true;
 
    return false;
}
Добавлено через 2 минуты
Цитата Сообщение от N0VY Посмотреть сообщение
Кстати говоря: что значит это?
извини, долго объяснять, со временем дойдешь сам до этого, начинающим это не нужно.
1
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
26.05.2018, 15:18  [ТС] 9
Спасибо!
0
1480 / 944 / 811
Регистрация: 30.04.2016
Сообщений: 3,298
03.07.2018, 20:36 10
N0VY, здравствуйте! Немного исправил ваш код. Заменил повторяющиеся числа на 999. Надеюсь, что в своем собственном коде вам разобраться будет проще. Идея такова: храним числа в множестве x (множество не допускает повторов). Если число не из множества - добавляем его в массив, иначе присваиваем 999. Все просто:

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
#include <iostream> 
#include <ctime> 
#include <set> 
#include <algorithm>
 
//#define size 5
 
    using namespace std;
 
int main() {
    srand(time(0));
    int arr1[5] { 0 };
    int arr2[5] { 0 };
    int arr3[10] { 0 };
    int j = 0;
    for (int i = 0; i < 5; i++) {
        arr1[i] = rand() % 10;
        cout << "arr1[" << i << "] = " << arr1[i] << endl;
    }
    cout << endl;
    for (int i = 0; i < 5; i++) {
        arr2[i] = rand() % 10;
        cout << "arr2[" << i << "] = " << arr2[i] << endl;
    }
    cout << endl;
    set<int> x;
    for (int i = 0; i < 10; i++) {
        if (i % 2 == 0) {
            if (x.find(arr1[j]) == x.end()) {
                x.insert(arr1[j]);
                arr3[i] = arr1[j];
            } else arr3[i] = 999;
        } else {
            if (x.find(arr2[j]) == x.end()) {
                x.insert(arr2[j]);
                arr3[i] = arr2[j];
            } else arr3[i] = 999;
            j++;
        }
    }
    for (int i = 0; i < 10; i++) {
        cout << "arr3[" << i << "] = " << arr3[i] << endl;
    }
    system("pause");
    return 0;
}
0
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
04.07.2018, 14:15  [ТС] 11
Я думал про эту тему все забыли, честно говоря Спасибо за ответ, но такая выходит канитель: я не проходил библиотеки set и algorithm. Так уж вышло. Поэтому, придётся Вам потрудиться и сделать всё, используя iostream, ctime, для необходимости, iomanip и conio.h. А так я пытался организовать это дело с заменой на 999, тип того.

Добавлено через 1 минуту
Кстати, можно ли сделать это без i % 2 == 0?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.07.2018, 14:15

Из двух массивов чисел образовать третий, и сортировать числа в порядке невозрастания
Всем привет! Помогите с решением задачи: заданы две последовательности вещественных чисел, в...

Из двух массивов сформировать третий
помогите решить задачу, плиз!!!! из массивов A и B сформировать массив C так, чтобы элементы...

Объединение двух массивов в третий
Как это можно сделать?

Определить в последовательности число соседств двух чисел с разным знаком (только с циклами, без массивов)
Здраствуйте! Дано натуральное число n, действительные числа q1,q2,..,qn . В последовательности...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.