Top.Mail.Ru
Ответы

Задача по программированию

Задание отсортировать по возрастанию модулей числа между 3 и 5 простыми числами массива.
Код работает с положительными числами, а с отрицательными - нет.
#include <iostream>
using namespace std;
bool prostota(int a)
{
if (a == 2 or a == 1) return 1;
for (int i = 2; i < (a / 2 + 1); i++)
{
if (a % i == 0) return 0;
}
return 1;
}
int main()
{
int n, prost3, prost5;
setlocale(LC_ALL, "Russian");
cout << "Введите размерность массива ";
cin >> n;
int* a = new int[n];
cout << "Введите массив " << endl;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
prost3=prost5 = 0;
int j = 0;
for (int i = 0 ;i<n; i++) {
if (prostota(a[i])) {
prost3 = i;
j++;
}
if (j == 3) break;
}
if (j < 3) {
cout << "В массиве менее 3 простых чисел ";
return 0;
}
j = 0;
for (int i = prost3+1; i < n; i++) {
if (prostota(a[i])) {
prost5 = i;
j++;
}
if (j == 2) break;
}
if (j < 2) {
cout << "В массиве менее 5 простых чисел ";
return 0;
}
for (int z = 1; z < prost5; z++) {
for (int i = prost3 + 1; i < prost5-z; i++) {
if (abs(a[i]) > abs(a[i + 1])) swap(a[i], a[i + 1]);
}
}
for (int i = 0; i < n; i++) {
cout << a[i] << " ";
}
}

По дате
По рейтингу
Аватар пользователя
Мыслитель

#include <iostream>
using namespace std;

bool prostota(int a) {
if (a <= 1) return false;
if (a <= 3) return true;
if (a % 2 == 0 || a % 3 == 0) return false;
for (int i = 5; i * i <= a; i += 6) {
if (a % i == 0 || a % (i + 2) == 0) return false;
}
return true;
}

int main() {
int n, prost3, prost5;
setlocale(LC_ALL, "Russian");
cout << "Введите размерность массива: ";
cin >> n;
int* a = new int[n];
cout << "Введите массив:\n";
for (int i = 0; i < n; i++) {
cin >> a[i];
}
prost3 = prost5 = 0;
int j = 0;
for (int i = 0; i < n; i++) {
if (prostota(a[i])) {
prost3 = i;
j++;
}
if (j == 3) break;
}
if (j < 3) {
cout << "В массиве менее 3 простых чисел ";
return 0;
}
j = 0;
for (int i = prost3 + 1; i < n; i++) {
if (prostota(a[i])) {
prost5 = i;
j++;
}
if (j == 2) break;
}
if (j < 2) {
cout << "В массиве менее 5 простых чисел ";
return 0;
}
for (int z = 1; z < prost5; z++) {
for (int i = prost3 + 1; i < prost5 - z; i++) {
if (a[i] * a[i] > a[i + 1] * a[i + 1]) swap(a[i], a[i + 1]);
}
}
cout << "Отсортированный массив: ";
for (int i = 0; i < n; i++) {
cout << a[i] << " ";
}
delete[] a;
return 0;
}

Аватар пользователя
Гуру

Сам