C/C++

С++ Помогите пожалуйста исправить, дополнить код.

Нужно что бы линейный массив выводил только четные числа, нечетные удалял(или просто не выводил).
#include <iostream>

#include <algorithm>

#include <cstdlib>

#include <ctime>



using namespace std;



int ElementSum(int N)


{

int sum = 0;

while (N > 0)

{

sum += N % 10;

N /= 10;

}

return sum;

}


int main()

{

setlocale (0,"rus");

int N;

cout << "Введите размер массива:" << endl;

cout << "N = ";

cin >> N;

int* A = new int[N];



for (int i=0; i<N; i++)//генерирует случайные числа

{

*(A+i)=rand()%10;

}

cout << "Сортируем\n";

for (int i = 0; i < N; i++)//сортирует

{

for (int j = N - 1; j > i; j--)

{

if (ElementSum(A[j]) > ElementSum(A[j-1]))

{

swap(A[j], A[j-1]);

}

}

}


cout << "Искомый массив:" << endl;

for (int i = 0; i < N; i++)// на вывод

{

cout << A[i] << " ";

}

cout << endl;


return 0;

}
Какой смысл вычислять сумму цифр для однозначных чисел? Всегда приводи условие задачи. Пока что твоя программа с добавленным в нее выводом только четных чисел, если не вставлять в нее миллион фигурных скобок и пустых строк, выглядит так:

#include "iostream"
#include "algorithm"
#include "cstdlib"
#include "ctime"
using namespace std;
int main(){
int n; cout<<"N: "; cin>>n; int* a=new int[n];
for(int i=0;i< n;i++)cout<<(a[i]=rand()%10)<<' '; cout<< endl;
sort(a,a+n); reverse(a,a+n);
for(int i=0;i< n;i++)if(~a[i]&1)cout<< a[i]<<' '; cout<< endl;}
Крутой Пацан
Крутой Пацан
66 423
Лучший ответ
#include <algorithm>
#include <iostream>
#include <random>
#include <iterator>
using namespace std;
int main() {
uniform_int_distribution<> uid(1, 9);
mt19937 gen{ random_device()() };
auto rnd = [&] { return uid(gen); };
cout << "Length: ";
size_t length;
cin >> length;
auto box = new int[length];
const auto end = box + length;
generate(box, end, rnd);
auto itr = ostream_iterator<int>(cout, " ");
copy(box, end, itr);
puts("");
auto even = new int[length];
auto is_even = [](const int x) { return !(x % 2); };
auto last = copy_if(box, end, even, is_even);
copy(even, last, itr);
puts("");
sort(box, end, greater<>());
copy(box, end, itr);
puts("");
sort(even, last, greater<>());
copy(even, last, itr);
puts("");
delete[] even;
delete[] box;
}
/*
Чётные значение делятся на 2 без остатка
*/

for (int i = 0; i < N; i++)// на вывод

{
if(A[i] % 2 == 0)
cout << A[i] << " ";

}

cout << endl;
Andras Magada
Andras Magada
53 705