Задача на массивы с++

328
19 декабря 2016, 19:55

Помогите, пожалуйста, разобраться с задачей. Из массива А удалить нечетные элементы, которые не равны нечетным элементам массива В.
Пример: Массив А=3, 4, 5; массив В=1, 5, 6 новый массив А = 4 5.
Мои соображения:

void main()
{
    int i, n, x, a[100], b[100];
    for (i = 0; i < n; i++) //n-количество элементов
    {
        cin >> a[i];
    }
    for (i = 0; i < n; i++)
    {
        cin >> b[i];
    }
    x = n;
    i = 0;
    for (i = 0; i < n; i++)
    {
        if (a[i] % 2 != 0 != b[i] % 2 !=0) 
        { //Дальше надо начать удалять нечетные элементы неравные В 
        }
    }        
    getch();    
}
Answer 1

Накидал вам решение второпях. Естественно, здесь нет никаких проверок на переполнение массива и т.д., это уж сами допишите. Если что не понятно, спрашивайте! =)

#define _CRT_SECURE_NO_WARNINGS
#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include <iostream>
    using namespace::std;
   int poisk(int B[], int temp, int n2)
   {
      int k=0;
      for (int i=0; i<n2; i++)
      {
         if (B[i]!=temp)
            k++;
      }
      if (k==n2)
          return 1;
      else
          return 0;

}

    void del(int A[], int &n1, int i)
    {
        for (i; i<n1; i++)
        {
         A[i]=A[i+1];
        }
        A[n1-1]=0;
        n1--;
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
            setlocale(LC_ALL, "Russian");
        int A[10];
        int B[10];
        int n1=0,n2=0;
        int temp;
        cout<<"Введите количество элементов первого массива: ";
        cin>>n1;
        cout<<endl<<"Введите количество элементов второго массива: ";
        cin>>n2;
        cout<<"Вводим значения первого массива:"<<endl;
        for (int i=0; i<n1; i++)
        {
         cin>>A[i];
        }
        cout<<"Вводим значения второго массива:"<<endl;
        for (int i=0; i<n2; i++)
        {
         cin>>B[i];
        }
        cout<<endl;
        for (int i=0; i<n1; i++)
        {
         if (A[i]%2!=0)
         {
             temp=A[i];
            if (poisk(B, temp, n2))
            {
                del(A, n1, i);
                i--;
            }
         }
        }
        for (int i=0; i<n1; i++)
        {
         cout<<A[i]<<endl;
        }
        _getch();
        return 0;
    }
Answer 2

Можно сделать что-нибудь такое: В цикле пробегаете по массиву А. Если элемент массива четный, то записываете его в результирующий массив. Если же он нечетный, то во вложенном цикле бегаете по массиву В и сравниваете текущее значение из A со значениями В. Если в В находится аналогичный элемент, то записываете его в результирующий массив и прерываете вложенный цикл

По окончании всех этих действий массив А становится равен результирующему массиву

Answer 3

Используйте стандартные контейнеры.

std::unordered_set exceptset(except.begin(), except.end());
std::copy_if(src.begin(), src.end(), 
             std::ostream_iterator<int>(std::cout, " "),
             [&exceptset](const int i)
             {
                 return !(i % 2 != 0 &&
                          exceptset.find(i) == exceptset.end());
             });

Ввод остаётся в качестве упражнения.

READ ALSO
Бинарное дерево C++

Бинарное дерево C++

У меня есть входной файл

294
Открытия приложения VISIO из программы на C++

Открытия приложения VISIO из программы на C++

Задача следующая на visual C++Код программы не требуется! Прочтите внимательно, может кто знает, или укажет, где посмотреть, куда обратиться

281
Граф в виде списка смежностей

Граф в виде списка смежностей

UPD: Переписал код и не пойму, почему вылетает на for(j = gr[i]list

303
Пропускает ввод данных

Пропускает ввод данных

Помогите исправить ошибку в коде:

351