Не могу разобраться с синтаксисом, подскажите. И правильный ли алгоритм?
#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;
}
Как я понимаю, пересечение - наличие хотя бы одного элемента четного, но отрицательного? Тогда достаточно просто проверки
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 подробнее?
Подтвердите что я понял правильно задание
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
Виртуальный выделенный сервер (VDS) становится отличным выбором
Ищу самую минималистскую IDE для C++ с вот такими требованиями:
При попытке скомпилировать следующий исходный код:
Как получить значение из тега Output?Это ползунокКак можно реализовать получение значения