Решение задачи на C/C++

Подскажите пожалуйста, что я делаю не так? //N - const введите сюда описание изображения

for (int i = 0; i < N; i++)
{
    
    for (int j = 1; j < N; j++)
    {
        if (arr[i] < arr[j])
        {
            int tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
        }
        else
        {
            arr[i] = 0;
        }
        
    }
}

Ответы (2 шт):

Автор решения: Harry

Не хотите начать перебирать не все элементы for (int j = 1; j < N; j++), а только те, что справа — for (int j = i+1; j < N; j++)? И еще — как мне кажется, "заменим значение" это совсем не означает "обменяем значения местами". Да, и не надо обнулять все подряд, надо только то, что надо — вне внутреннего цикла...

int main()
{
    const int N = 9;
    int arr[N] = { 2,9,8,5,9,3,4,5,2 };
    for (int i = 0; i < N; i++)
    {
        bool is = false;
        for (int j = i+1; j < N; j++)
        {
            if (arr[i] < arr[j])
            {
                arr[i] = arr[j];
                is = true;
                break;
            }
        }
        if (!is) arr[i] = 0;
    }

    for(auto a: arr) cout << a << " ";
}
→ Ссылка
Автор решения: Nik
for (int i = 0; i < N; i++)
{
    f = 1;
    for (int j = i; j < N; j++)
    {
        if (arr[i] < arr[j]) {
            arr[i] = arr[j];
            f = 0;
            break;
        } 
    }
    if (f) {
        arr[i] = 0;
    }
}

Сразу скажу что если задача олимпиадная, то скорее всего не зайдет на больших тестах, лучше использовать префиксные суммы или что-то на подобии их. А теперь что я изменил:

  1. В задаче сказано что мы проходим только последующие поля массива, следовательно

for (int j = i; j < N; j++)

  1. Далее пройдем все последующие поля и если поле больше, заменяем(никаких смен мест тут не нужно!). Далее если даже после прохода всего цикла мы так и не поменяли ячейку(переменная f будет равна 1), то заменим ее на ноль. Важно это делать вне цикла, иначе мы проверяем ТОЛЬКО следующее число, и то не совсем правильно...

Возможны ошибки, я даже не компилировал. Если что пишите сюда, я исправлю

→ Ссылка