Вячеслав 25 ноября 2019 в 07:36

C++
Заполнить массив случайными числами в интервале [-100,100] и переставить элементы так, чтобы все положительные элементы стояли в начала массива, а все отрицательные и нули – в конце. Вычислите количество положительных элементов.

Возможно, не самое эффективное решение
#include lt;iostreamgt;
#include lt;cstdlibgt;
#include lt;ctimegt;
int main()
{
    using namespace std;
    const int N = 10;
    int A[N];
    srand(time(0));
    for (int i = 0; i lt; N; ++i)
        A[i] = rand() 201 - 100;
   
    //Вывод исходного массива на экран
    for (int i = 0; i lt; N; ++i)
        cout lt;lt; A[i] lt;lt; "  ";
    cout lt;lt; endl;

    //Подсчитаем количества положительных и отрицательных
    int kpos = 0, kneg = 0;
    for (int i = 0; i lt; N; i++)
        if (A[i] gt; 0)
            ++kpos;
        else
            ++kneg;

    int * Apos = new int[kpos];
    int * Aneg = new int[kneg];
    int pos = 0, neg = 0;
    for (int i = 0; i lt; N; ++i)
        if (A[i] gt; 0)
            Apos[pos++] = A[i];
        else
            Aneg[neg++] = A[i];

    for (int i = 0; i lt; N; ++i)
        if (i lt; kpos)
            A[i] = Apos[i];
        else
            A[i] = Aneg[i - kpos];

    delete[] Apos;
    delete[] Aneg;

    //Вывод полученного массива на экран
    for (int i = 0; i lt; N; ++i)
        cout lt;lt; A[i] lt;lt; "  ";
    cout lt;lt; endl;
    return 0;
}

Для комментирования необходимо зарегистрироваться на сайте