Обработка массива по условию
) Есть два массива A и B. Пользователь вводит в них значения, нужно создать массив C в котором будут числа, присутствующие только в массиве A или только в массиве B Написал вот такую программу и выдает не верный ответ( Не могу понять что не так и как исправить
#include <iostream>
using namespace std;
bool finding(int arr[],int size,int num){
for(int i = 0;i<size;++i)if(arr[i] == num)return 1;
return 0;
}
int main()
{
int size,size1;
cout << "Введите сначала длину массива A потом длину массива B\n";
cin >> size >> size1;
cout << "Вводите сначала значения массива A потом значения массива B\n";
int arr[size],arr1[size1];
for(int i = 0;i<size;++i)cin >> arr[i];
for(int i = 0;i<size1;++i)cin >> arr1[i];
for(int i = 0;i<max(size,size1);++i){
if(size > size1){
if(!finding(arr1,size1,arr[i]))cout << arr[i] << ' ';
} else {
if(!finding(arr,size,arr1[i]))cout << arr1[i] << ' ';
}
}
cout << endl;
return 0;
}
Ответы (1 шт):
Когда спрашиваете размеры данных и при компиляции неизвестно количество. Тогда нужно выделять память по-другому. С помощью new[], потом освобождать с delete[];
int * const arr = new int [size] ;
int * const arr1 = new int [size1] ;
Про алгоритм : нужно два отдельных цикла. Первый цикл смотрит индивидульные элементы в первом массиве. А второй цикл во втором. Вы не создаёте массив, а просто выводите в консоль. Нужно выделить память для нового массива и потом не забыть удалить.
// выделяем память по максимуму в виде суммы
int * const arr3 = new int [ size + size1 ] ;
// количество полезных элементов пока ноль
int size3 = 0 ;
for(int i = 0;i<size;++i)
if(!finding(arr1,size1,arr[i])) {
arr3[size3] = arr[i] ;
++ size3 ; }
for(int i = 0;i<size1;++i)
if(!finding(arr,size,arr1[i])) {
arr3[size3] = arr1[i] ;
++ size3 ; }
// затем можно выводить, если хочется
cout << "C = "
for(int i = 0;i<size3;++i)
cout << arr3[i] << ' ';
cout << endl ;
// удалить занятую память не забываем
delete [ ] arr3 ;
delete [ ] arr1 ;
delete [ ] arr ;