Есть два массива a и b. Нужно вывести массив d из элементов масссивов a и b, которые не повторяются.
Например: a: 1 3 6 3 -2
b: 5 4 1 3 -4
тогда массив d:6 -2 5 4 -4
Спасибо.
Другие языки программирования и технологии
Си++ Программирование. Создать третий массивов из неповторяющихся повторений на основе 2 исходных
#pragma warning (disable: 4996)
#include <iostream>
#include <algorithm>
#include <set>
using namespace std;
int main() {
int a[] = { 1, 3, 6, 3, -2 };
const auto sa = sizeof(a) / sizeof(a[0]);
int b[] = { 5, 4, 1, 3, -4 };
const auto sb = sizeof(b) / sizeof(b[0]);
const auto sd = sa + sb;
int d[sd];
set<int> va;
for (const auto v : a) va.insert(v);
set<int> vb;
for (const auto v : b) vb.insert(v);
const auto ita = set_difference(va.begin(), va.end(), vb.begin(), vb.end(), begin(d));
auto last = ita - begin(d);
const auto itb = set_difference(vb.begin(), vb.end(), va.begin(), va.end(), begin(d) + last);
for (const auto v : a) cout << ' ' << v;
cout.put('\n');
for (const auto v : b) cout << ' ' << v;
cout.put('\n');
last = itb - begin(d);
sort(begin(d), begin(d) + last);
for (size_t i = 0; i != last; ++i) cout << ' ' << d[i];
cout.put('\n');
system("pause");
}
#include <iostream>
#include <algorithm>
#include <set>
using namespace std;
int main() {
int a[] = { 1, 3, 6, 3, -2 };
const auto sa = sizeof(a) / sizeof(a[0]);
int b[] = { 5, 4, 1, 3, -4 };
const auto sb = sizeof(b) / sizeof(b[0]);
const auto sd = sa + sb;
int d[sd];
set<int> va;
for (const auto v : a) va.insert(v);
set<int> vb;
for (const auto v : b) vb.insert(v);
const auto ita = set_difference(va.begin(), va.end(), vb.begin(), vb.end(), begin(d));
auto last = ita - begin(d);
const auto itb = set_difference(vb.begin(), vb.end(), va.begin(), va.end(), begin(d) + last);
for (const auto v : a) cout << ' ' << v;
cout.put('\n');
for (const auto v : b) cout << ' ' << v;
cout.put('\n');
last = itb - begin(d);
sort(begin(d), begin(d) + last);
for (size_t i = 0; i != last; ++i) cout << ' ' << d[i];
cout.put('\n');
system("pause");
}
Венер Мухамедов
Приветствую) Как тут дела?)
Создаёшь массив c, содержащий все элементы массивов a и b.
Сортируешь массив c.
Копируешь в массив d только те элементы с [i], для которых: c[i] != c[i - 1] && c[i] != c[i + 1]. Или, что тоже самое: (c[i] - c[i - 1]) * (c[i] - c[i + 1]) != 0
P.S. Понятно, что для первого и последнего элементов надо проверить только половину условия.
Сортируешь массив c.
Копируешь в массив d только те элементы с [i], для которых: c[i] != c[i - 1] && c[i] != c[i + 1]. Или, что тоже самое: (c[i] - c[i - 1]) * (c[i] - c[i + 1]) != 0
P.S. Понятно, что для первого и последнего элементов надо проверить только половину условия.
Дмитрий Попов
проще использовать коллекцию set. (или словарь, если множеств нет в используемом языке)
#include
#include
#include
#include
using namespace std;
#define MAX_NUM 20
void initArray(int* Array,int len = 10)
{
for (int i=0; i < len; i++)
{
Array[i] = rand()% MAX_NUM;
}
//Array[rand()% len] = MAX_NUM + 1;
}
void printArray(char* name, int* Array, int len = 10)
{
cout << "\nArray "<<name<<endl;
for (int i=0; i < len; i++)
cout<<"["<<i<<"] = " << Array[i] << "\n";
}
int fillAray(int* D, int* A, int* B, int la, int lb)
{
int d,a,b;
d = a = b = 0;
int lmax = la;
if( lmax < lb )
lmax = lb;
while(a < la || b < lb )
{
if( (A[a] < B[b] && a < la) || (b >= lb && a < la ) )
{
D[d] = A[a];
d++;
a++;
}
if( (B[b] < A[a] && b < lb) || (a >= la && b < lb) )
{
D[d] = B[b];
d++;
b++;
}
if(B[b] == A[a] )
{
b++;
a++;
}
}
return d;
}
bool MinToMax(int a, int b) { return a < b; }
int main()
{
int A[] = {1,2,3,4,5,6,7};
int B[] = {10,11,12,13,14};
int D[13];
srand( time(NULL) );
//initArray(A,7);
//initArray(B,5);
//sort(A, A+7, MinToMax);
//sort(B, B+5, MinToMax);
printArray("A", A,7);
printArray("B", B,5);
int d = fillAray(D, A, B, 7, 5);
printArray("D", D,d);
return 0;
}
#include
#include
#include
using namespace std;
#define MAX_NUM 20
void initArray(int* Array,int len = 10)
{
for (int i=0; i < len; i++)
{
Array[i] = rand()% MAX_NUM;
}
//Array[rand()% len] = MAX_NUM + 1;
}
void printArray(char* name, int* Array, int len = 10)
{
cout << "\nArray "<<name<<endl;
for (int i=0; i < len; i++)
cout<<"["<<i<<"] = " << Array[i] << "\n";
}
int fillAray(int* D, int* A, int* B, int la, int lb)
{
int d,a,b;
d = a = b = 0;
int lmax = la;
if( lmax < lb )
lmax = lb;
while(a < la || b < lb )
{
if( (A[a] < B[b] && a < la) || (b >= lb && a < la ) )
{
D[d] = A[a];
d++;
a++;
}
if( (B[b] < A[a] && b < lb) || (a >= la && b < lb) )
{
D[d] = B[b];
d++;
b++;
}
if(B[b] == A[a] )
{
b++;
a++;
}
}
return d;
}
bool MinToMax(int a, int b) { return a < b; }
int main()
{
int A[] = {1,2,3,4,5,6,7};
int B[] = {10,11,12,13,14};
int D[13];
srand( time(NULL) );
//initArray(A,7);
//initArray(B,5);
//sort(A, A+7, MinToMax);
//sort(B, B+5, MinToMax);
printArray("A", A,7);
printArray("B", B,5);
int d = fillAray(D, A, B, 7, 5);
printArray("D", D,d);
return 0;
}
Похожие вопросы
- пожалуйста, напишите мне программу этого вопроса в C ++.пожалуйста помогите. Создать динамический массив из N чисел.
- Создать двумерный массив. Pascal
- Помогите с программой на Си. (создание многомерных динамических массивов)
- Программирование ассемблер. Дан массив из 8 байт. Посчитать количество байт, в которых число нулей и единиц одинаковое
- Как на Си, не с++ одномерный массив чисел
- Можно ли почти без навыков программирования создать игру, как допустим тот же ассасин?
- Язык программирования c++, в массиве, найти положительные числа
- всем кто смыслит в СИ программировании . проверьте решение
- Поможете найти и исправить тут ошибку. (СИ программирование)
- Программирование. C какого языка начать учить хотя бы основу? и как учить правильно?