Другие языки программирования и технологии

Помогите пожалуйста с решением задания на с++

Дан два массива размерности 27. Заполнить массив случайными
числами в диапазоне от -48 до 59. Вывести массивы на экран. Найти первый
чётный и последний положительный элементы и вывести их и их индексы на
экран. Произвести сортировку по возрастанию элементов, расположенных
между ними. Вывести массивы на экран. Найти и вывести на экран количество
простых чисел в массиве и их индексы.
Размерность массива — это количество индексов, необходимое для однозначной адресации элемента в рамках массива.
Т. е. 27 мерный массив у тебя? Если да, то каким образом его выводить на экран?
Или все таки массив 2х-мерный, т. е. мартица размером 27х27?
Анатолій Дмитрук
Анатолій Дмитрук
30 477
Лучший ответ
Сергей Тихонов два отдельных одномерных массива с 27 элементами в каждом, насколько я понимаю
#include <iostream>
#include <array>
#include <vector>
#include <random>
#include <algorithm>
using namespace std;

vector<unsigned> sieveOfEratosthenes(unsigned max);

ostream& operator<<(ostream& os, const vector<unsigned>& v){
if(v.size() == 0) return os << "[]";
os << '[';
for(size_t i = 0; i < v.size(); i++)
os << v[i] << (v.size() - i == 1 ? "]" : ", ");

return os;
}

int main(){
array<int, 27> A;

mt19937 engine((random_device())());
uniform_int_distribution<int> dist(-48, 59);

cout << "Массив: ";
for(size_t i = 0; i < A.size(); i++)
cout << (A[i] = dist(engine)) << (A.size() - i == 1 ? '\n' : ' ');

array<int, 27>::iterator begin = find_if(A.begin(), A.end(), [](int n){ return n % 2 == 0; }) + 1;
array<int, 27>::iterator end = find_if(A.rbegin(), A.rend(), [](int n){ return n > 0; }).base() - 1;
sort(begin, end);

cout << "Массив после сортировки: ";
for(size_t i = 0; i < A.size(); i++)
cout << A[i] << (A.size() - i == 1 ? '\n' : ' ');

vector<unsigned> primes = sieveOfEratosthenes(*max_element(A.cbegin(), A.cend()));

cout << "Простые числа: " << endl;
for(size_t i = 0; i < A.size(); i++)
if(find(primes.cbegin(), primes.cend(), A[i]) != primes.cend())
cout << "A[" << i << "] = " << A[i] << endl;

return 0;
}

vector<unsigned> sieveOfEratosthenes(unsigned max){
if(max <= 1) return {};
bool* mask = new bool[max + 1];

mask[0] = false;
mask[1] = false;
for(size_t i = 2; i <= max; i++) mask[i] = true;

vector<unsigned> res = {2};

while(res.back() * res.back() <= max){
for(size_t i = res.back() * res.back(); i <= max; i += res.back())
mask[i] = false;

res.push_back(res.back());
while(res.back() <= max && !mask[++res.back()]);
}
if(res.back() > max) res.erase(res.end() - 1);
for(unsigned i = res.back() + 1; i <= max; i++)
if(mask[i]) res.push_back(i);

delete[] mask;

return res;
}
ИШ
Игорь Шмидт
11 157
полный код: https://pastebin.com/TSjfPEWY
если коротко:
Юрий Аракелян
Юрий Аракелян
1 487