С одного масива скласть два
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main() {
system("chcp 1251>null");
srand(time(NULL));
int n;
cin >> n;
int*a = new int [n];
int k=0, z=0;
for (int i = 1; i < n+1; i++) {
a[i] = -500 + rand() % 501;
cout << a[i] << " ";
if (a[i] % i == 0) {
k++;
}
else { z++; }
}
cout << endl;
int *b= new int[k];
int* c = new int[z];
for (int i = 1; i < n+1; i++) {
if (a[i] % i == 0) {
b[i]==a[i];
}
else { c[i] = a[i]; }
}
for (int i = 0; i < k; i++) {
cout << b[i] << " ";
}
cout << endl;
for (int i = 0; i < z; i++) {
cout << c[i] << " ";
}
cout << endl;
system("pause>null");
return 0;
}
Дано один масив,нужно два масива в первом все простие числа ,в втором нет,что здесь не верно?
Ответы (1 шт):
Вообще ваш код не делает, того что вам нужно, то есть a[i] % i == 0 не значит, что a[i] простое число.
Что за промежуток у цикла?
for(int i = 1; i < n+1; i++)
У вас массив a размером n, происходит выход за пределы массива!
Нужно идти от 0, до i < n. А внутри цикла, где происходит a[i] % i пишите a[i] % (i + 1), чтобы не происходило деления на 0.
Далее вы пишите:
b[i] = a[i] //аналогично с c[i] = a[i]
Но размер b или c не равен n, то есть опять выход за пределы массива.
Нужно сделать две переменные, которые будут отвечать за индекс следующего элемента в массиве для вставки.
int i1 = 0, i2 = 0;
И писать:
b[i1++] = a[i]; //c[i2++] = a[i]
И теперь ваша программа запуститься, но будет работать не так как вам нужно. Потому что проверки на простоту я у вас не вижу.
Спонсор ответа: Дебаггер. Лучшее что придумало человечество для отладки программ.