Выборка из массива меньших массивов и условие пересечения оных - C++

198
12 марта 2017, 07:20
  1. Рандомно создаю массив A.
  2. проверяю, если в нем есть массив P из четных чисел.
  3. проверяю, есть ли также массив Q из отрицательных чисел.
  4. если P и Q пересекаются, вывожу "да/нет"

Не могу разобраться с синтаксисом, подскажите. И правильный ли алгоритм?

#include <iostream> //стандартный ввод и вывод
#include <time.h>   //для рандома
#include <stdlib.h> //операции
#include <stdio.h>
#include <iomanip> //для ровного массива
using namespace std;
int main()
{
    setlocale(LC_ALL, "Russian");
    srand(time(NULL));
    const  int N=25;
    int a[N][N];
//////////////
   for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            a[i][j] = rand() % 100 - 25;
        }
    }
///////////
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            cout<<setw(4)<<a[i][j];
        }
        cout << endl;
    }
/////////////////
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            if ( a[i][j]%2==0) && (a[i][j] != 0);
            if ( a[i][j+1]) %2 ==0) && (a[i][j+1] != 0);
            if ( a[i+1][j]) %2 ==0) && (a[i+1][j] != 0);
            if ( a[i+1][j+1]) %2 ==0) && (a[i+1][j+1] != 0);
            {
                if ( a[i][j] > 0);
                if ( a[i][j+1]) > 0);
                if ( a[i+1][j]) > 0);
                if ( a[i+1][j+1]) > 0);
            }
        cout<<"ДА"<<endl;
        }
    cout<<"НЕТ"<<endl;
    }
system "PAUSE";
return 0;
}
Answer 1

Как я понимаю, пересечение - наличие хотя бы одного элемента четного, но отрицательного? Тогда достаточно просто проверки

for(int i = 0; i<N; ++i) for(int j = 0; j<N; ++j)
{
    if ((a[i]j]) < 0 && (a[i][j]%2 == 0)) { cout << "Да\n"; return; }
}
cout << "Нет\n";

или чего-то в этом роде. Но у вас какие-то страшные телодвижения (помимо неверных if еще и с выходом за границу массива), так что, может, объясните, что вы понимает под массивом P и массивом Q подробнее?

Answer 2

Подтвердите что я понял правильно задание

  • Создается 2-й массив А NxN целых чисел от -25 до 302 ?
  • проверяется, есть ли в нем подмножество P четных чисел и оно выводится на печать
  • проверяется, есть ли в нем подмножество Q отрицательных чисел и оно выводится на печать
  • выводится Да если P и Q пересекаются

system ("PAUSE"); - скобки забыты

if ( a[i][j] > 0); - ничего не делающая строка

Все можно сделать в один цикл, сохранив результаты в вектора и вывести потом.

#include <iostream> //стандартный ввод и вывод
#include <time.h> 
#include <iomanip> //для ровного массива
#include <vector>
#include <array>
using std::cout;
using std::vector;
using std::array;
int main()
{
    setlocale(LC_ALL, "ru_RU.UTF-8");
    srand((unsigned)time(NULL));
    const  int N=25;
    array<array<int, N>, N> a;
    // Генерация
    for(int i = 0; i<N; ++i)
        for(int j = 0; j<N; ++j)
            a[i][j] = rand() % 100 - 25;
    vector<int> p,q;
    bool intersect = false;
    for(int i = 0; i<N; ++i) 
        for(int j = 0; j<N; ++j)
        {
            int tmp = a[i][j];
            if(tmp%2 == 0 ) 
            {
                p.push_back(tmp);
                if(tmp < 0) 
                    intersect = true;
            }
            if(tmp < 0 ) 
                q.push_back(tmp);
        }
    std::cout << "P[] = { ";
    for (auto i: p)
        std::cout << i << ' ';
    std::cout << "}\nQ[] = { ";    
    for (auto i: q)
        std::cout << i << ' ';
    std::cout << "}\n";
    if (intersect)
        std::cout << "ДА\n";
    else
        std::cout << "НЕТ\n";
}

Если P и Q должны содержать уникальные элементы, то нужно использовать std::set и emplace вместо push_back

READ ALSO
Самая минималистская IDE для C++ [требует правки]

Самая минималистская IDE для C++ [требует правки]

Ищу самую минималистскую IDE для C++ с вот такими требованиями:

236
Ошибка: &#171;Unresolved external &#39;std::tr1::_Random_device()&#39;&#187;

Ошибка: «Unresolved external 'std::tr1::_Random_device()'»

При попытке скомпилировать следующий исходный код:

224
Фильтр с помощью STL

Фильтр с помощью STL

Что-то ощущение, что вопрос из серии "как я сам недотумкал", но

278
Как получить значение из output?

Как получить значение из output?

Как получить значение из тега Output?Это ползунокКак можно реализовать получение значения

348