Необходимо создать третий массив минимально возможного размера, в котором нужно собрать элементы массива A, которые не включаются в массив B.
void sort(int *arrN, int sizeN)
{
int tmp = 0;
for (int i = 0; i < sizeN; ++i)
{
for (int j = i + 1; j < sizeN; ++j)
{
if (arrN[j] < arrN[i])
{
tmp = arrN[j];
arrN[j] = arrN[i];
arrN[i] = tmp;
}
}
}
}
int main()
{
int sizeA, sizeB;
cout << "Введите размер первого массива: ";
cin >> sizeA;
cout << "Введите размер второго массива: ";
cin >> sizeB;
int *arrA = new int[sizeA];
int *arrB = new int[sizeB];
cout << "\n\nПервый массив: ";
for (int x = 0; x < sizeA; x++)
{
arrA[x] = rand() % 9 + 1;
cout << arrA[x] << " ";
}
cout << "\n\nВторой массив: ";
for (int x = 0; x < sizeB; x++)
{
arrB[x] = rand() % 9 + 1;
cout << arrB[x] << " ";
}
sort(arrA, sizeA);
sort(arrB, sizeB);
cout << "\n\nПервый массив (Отсортированный): ";
for (int x = 0; x < sizeA; x++)
{
cout << arrA[x] << " ";
}
cout << "\n\nВторой массив (Отсортированный): ";
for (int x = 0; x < sizeB; x++)
{
cout << arrB[x] << " ";
}
int *arrC = new int[sizeA < sizeB ? sizeA : sizeB];
int sizeC = 0;
for (int x = 0, y = 0; x < sizeA && y < sizeB; )
{
if (arrA[x] == arrB[y])
{
++x;
}
else if (arrA[x] == arrB[y])
{
++y;
}
else
{
arrC[sizeC] = arrA[x];
sizeC++;
x++; y++;
}
}
cout << "\n\nТретий массив: ";
for (int x = 0; x < sizeC; x++)
{
cout << arrC[x] << " ";
}
delete[] arrA;
delete[] arrB;
delete[] arrC;
}
Первый массив: 3 1 6 1 5
Второй массив: 3 4 6 1 6 4 4
Первый массив (Отсортированный): 1 1 3 5 6
Второй массив (Отсортированный): 1 3 4 4 4 6 6
Третий массив: 3 5 6
Не могу определить ошибку.
Попробовал проверять элементы двумя циклами:
for (int x = 0, y = 0; x < sizeA && y < sizeB; )
{
for (int z = 0, n = 0; z < sizeA && n < sizeB; )
{
if (arrA[z] == arrB[n])
{
++z;
}
else if (arrA[z] == arrB[n])
{
++n;
}
else
{
arrC[sizeC] = arrA[z];
sizeC++;
z++; n++;
}
}
x++, y++;
}
Но программа багается и неприличные звуки виндовса.
@Ibragim Magomedov
cout << "Даны два массива: А[M] и B[N] (M и N вводятся с клавиатуры). Необходимо создать третий массив минимально возможного размера, в котором нужно собрать элементы массива A, которые не включаются в массив B\n\n";
int sizeA, sizeB;
cout << "Введите размер первого массива: ";
cin >> sizeA;
cout << "Введите размер второго массива: ";
cin >> sizeB;
int *arrA = new int[sizeA];
int *arrB = new int[sizeB];
cout << "\n\nПервый массив: ";
for (int x = 0; x < sizeA; x++)
{
arrA[x] = rand() % 9 + 1;
cout << arrA[x] << " ";
}
cout << "\n\nВторой массив: ";
for (int x = 0; x < sizeB; x++)
{
arrB[x] = rand() % 9 + 1;
cout << arrB[x] << " ";
}
sort(arrA, sizeA);
sort(arrB, sizeB);
cout << "\n\nПервый массив (Отсортированный): ";
for (int x = 0; x < sizeA; x++)
{
cout << arrA[x] << " ";
}
cout << "\n\nВторой массив (Отсортированный): ";
for (int x = 0; x < sizeB; x++)
{
cout << arrB[x] << " ";
}
int *arrC = new int[sizeA < sizeB ? sizeA : sizeB];
int sizeC = 0;
bool no_write = false;
for (int a = 0, c = 0; a < sizeA; a++)
{
for (int b = 0; b < sizeB; b++)
if (arrA[a] == arrB[b])
{
no_write = true;
break;
}
if (no_write = false)
if (arrC[c] != arrA[a])
{
arrC[c] = arrA[a];
c++;
}
else no_write = true;
}
cout << "\n\nТретий массив: ";
for (int x = 0; x < sizeC; x++)
{
cout << arrC[x] << " ";
}
delete[] arrA;
delete[] arrB;
delete[] arrC;
Исправил свой код и вот готовый рабочий вариант.
{
cout << "Даны два массива: А[M] и B[N] (M и N вводятся с клавиатуры). Необходимо создать третий массив минимально возможного размера, в котором нужно собрать элементы массива A, которые не включаются в массив B\n\n";
int sizeA, sizeB;
cout << "Введите размер первого массива: ";
cin >> sizeA;
cout << "Введите размер второго массива: ";
cin >> sizeB;
int *arrA = new int[sizeA];
int *arrB = new int[sizeB];
cout << "\n\nПервый массив: ";
for (int x = 0; x < sizeA; x++)
{
arrA[x] = rand() % 9 + 1;
cout << arrA[x] << " ";
}
cout << "\n\nВторой массив: ";
for (int x = 0; x < sizeB; x++)
{
arrB[x] = rand() % 9 + 1;
cout << arrB[x] << " ";
}
sort(arrA, sizeA);
sort(arrB, sizeB);
cout << "\n\nПервый массив (Отсортированный): ";
for (int x = 0; x < sizeA; x++)
{
cout << arrA[x] << " ";
}
cout << "\n\nВторой массив (Отсортированный): ";
for (int x = 0; x < sizeB; x++)
{
cout << arrB[x] << " ";
}
int *arrC = new int[sizeA < sizeB ? sizeA : sizeB];
int sizeC = 0;
cout << endl << endl << endl;
bool flag;
for (int x = 0; x < sizeA; x++)
{
flag = false;
for (int y = 0; y < sizeB; y++)
{
if (arrA[x] == arrB[y])
{
flag = true;
break;
}
}
if (flag == false)
{
arrC[sizeC] = arrA[x];
sizeC++;
}
}
cout << "\n\nТретий массив: ";
for (int x = 0; x < sizeC; x++)
{
cout << arrC[x] << " ";
}
delete[] arrA;
delete[] arrB;
delete[] arrC;
}
так понимаю вы имели ввиду разность множеств, код ниже можете попробовать (работает в отсортированных множествах)
int* subtract(int *a, int *b, int m, int n, int &k)
{
int i(0); // индекс для а
int j(0); // индекс для b
int *buf = new int[m];
while (i < m)
{
if (j == n)
{
buf[k] = a[i];
++i;
++k;
}
else if (a[i] == b[j])
{
++i;
++j;
}
else if (a[i] < b[j])
{
buf[k] = a[i];
++i;
++k;
}
else if (a[i] > b[j])
{
buf[k] = a[i];
++j;
++k;
}
}
return buf;
}
void read(int *a, int n)
{
for (int i = 0;i < n;++i)
{
cin >> a[i];
}
}
void write(int *a, int n)
{
for (int i = 0;i < n;++i)
{
cout << a[i] << ' ';
}
}
int main()
{
int m, n;
cin >> m >> n;
int *a = new int[m];
int *b = new int[n];
read(a, m);
read(b, n);
int k = 0;
int *c = subtract(a, b, m, n, k);
write(c, k);
delete[] a;
delete[] b;
delete[] c;
return 0;
}
В вашем варианте кода есть некоторые непонятки, например два одинаковых условия, где второе никогда не выполнится и т.д.
В результате, итоговый массив заполнялся всякими разными рандомными элементами.
Если не особо понимаете в чем ошибка, и у вас выходит что-то не так, можете попробовать пройтись по коду , как это делает машина. Каждую итерацию, каждое действие, отчасти это может вам помочь в понимании не только того, как работает машина, но и каким образом работает тот или иной алгоритм, и возможно понять, как можно его улучшить, изменить и тд.
Вот рабочий алгоритм, который ближе к вашему коду:
for (int x = 0, y = 0; x < sizeA && y < sizeB; )
{
if (arrA[x] > arrB[y]) y++; else if (arrA[x] == arrB[y]) { x++; y++; }
else
{
arrC[sizeC] = arrA[x];
sizeC++;
x++;
}
}
Простым поэлементным сравнением не пробовали? Должно по идеи помочь.
bool no_write = false;
for (int a = 0, int c = 0; a < size(arrayA); a++)
{
for (int b = 0; b < size(arrayb); b++)
if(arrayA[a] == arrayB[b])
{
no_write = true
break;
}
if(no_write = false)
if(arrayC[c] != arrayA[a])
{
arrayC[c] = arrayA[a];
c++;
}
else no_write = true;
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как сохранить в цикле имена классов и классов-родителей так, что бы при необходимости вывести какой то класс по имени так: сперва выводились...
Имеется freebsd 12, собранный из портов Qt5 и GCC7Любое написанное приложение падает при dynamic_cast
VS2017 жалуется на "FMeshDrawSingleShaderBindings не определён"В UE4 всё компилируется без проблем и объект создаётся на сцене