#include <iostream>
#include <ctime>
using namespace std;
void random1(int* nPtr, int n) {
for (int i(0); i < n; i++) {
*(nPtr + i) = rand() % 10 + 1;
cout << *(nPtr + i) << " ";
}
cout << endl << endl << endl;
}
void random2(int* mPtr, int m) {
for (int i(0); i < m; i++) {
*(mPtr + i) = rand() % 10 + 1;
cout << *(mPtr + i) << " ";
}
cout << endl << endl << endl;
}
void Desiigner(int* mPtr, int* nPtr, int* xPtr, int x, int m, int n) {
int sck;
int t = 0;
int k = 0;
int* aPtr = new int[m + n];
for (int i(0); i < m; i++) {
*(aPtr + i) = *(mPtr + i);
k = i;
}
k++;
int q = 0;
for (int i(0); i < n; i++, k++) {
*(aPtr + k) = *(nPtr + i);
}
int kof = 0;
for (int i(0); i < m + n; i++) {
for (int j(0); j < m + n; j++) {
if (i == j) {
j++;
}
if (*(aPtr + i) == *(aPtr + j)) {
kof++;
}
}
if (kof == 0) {
*(xPtr + q) = *(aPtr + i);
for (; t < 1; t++) {
sck = *(xPtr + q);
}
if (q > x) {
break;
}
q++;
}
kof = 0;
}
for (int i(0); i < m + n; i++) {
cout << *(aPtr + i) << " ";
}
cout << endl << endl;
for (int i(0); i < x; i++) {
if (*(xPtr + i) < 0) {
break;
}
cout << *(xPtr + i) << " ";
}
cout << endl << endl;
for (int i(0); i < m + n; i++) {
if (*xPtr == sck) {
break;
}
xPtr--;
}
for (int i(0); i < x; i++) {
cout << *(xPtr + i) << " ";
}
cout << endl << *xPtr << endl << endl;
delete[] aPtr;
}
int main() {
//srand(time(0));
setlocale(LC_ALL, "UKR");
int m, n, x;
cout << "Введiть кiлькiсть елементiв першого масиву: ";
cin >> m;
cout << endl;
cout << "Введiть кiлькiсть елементiв другого масиву: ";
cin >> n;
cout << endl << endl;
x = (m > n) ? n : m;
int* mPtr = new int[m];
int* nPtr = new int[n];
int* xPtr = new int[x];
random1(nPtr, n);
random2(mPtr, m);
Desiigner(mPtr, nPtr, xPtr, x, m, n);
delete[] xPtr, nPtr, mPtr;
system("pause");
return 0;
}
Проблема в xPtr, никак не могу найти ошибку, он на нулевом элементе даже.
Отвечаю на исходную задачу.
Даны два массива: А[M] и B[N] (M и N вводятся с клавиатуры). Необходимо создать третий массив минимально возможного размера, в котором нужно собрать общие элементы двух массивов без повторений.
Тег С++. Ну так и пишем.
Для начала чтение массива чисел.
std::vector<int> readArray(std::istream &is) {
int s;
std::cin >> s;
std::vector<int> res;
std::copy_n(std::istream_iterator<int>(std::cin),
s,
std::back_inserter(res));
return res;
}
Теперь надо бы слить их.
std::set<int> r;
auto x = readArray(std::cin);
r.insert(x.begin(), x.end());
x = readArray(std::cin);
r.insert(x.begin(), x.end());
А, нам надо массив создать. Ну окей.
std::vector<int> final_res(r.begin(), r.end());
std::copy(final_res.begin(), final_res.end(), std::ostream_iterator<int>(std::cout, " "));
В качестве бонуса даже распечатаю новый массив.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как избавиться от локальных переменных, используя элементы класса в read()?
Я плохо понимаю, как умные указатели (особенно shared_ptr) взаимодействуют с полиморфными типамиОбщая картина кажется простой, но как только я начинаю...
Для наглядности: на вход программе даётся число, к примеру 1234Нужно сделать так, чтобы на выходе вывелось число 4321