Задачка по C++. Помогите, пожалуйста

Ввести целочисленный массив, состоящий из 17 элементов. Заменить элементы кратные трем на сумму нечетных по значению элементов.

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
const int str = 16; 
int matr[str];  
int summ = 0;       
   
for (int n = 0; n < str; n++)

{
    matr[n] = n++;
}

for (int i = 0; i < 16; ++i)
{
    if (matr[i] % 2 != 1)
    {
        summ = summ + matr[i];
    }
}

for (int i = 0; i < str; ++i)
{
    if (matr[i] % 3 == 1)
    {
        matr[i] = summ;
    }
}
for (int i = 0; i < str; ++i)
{
    std::cout << matr[i] << " ";
}

}

Код мне выводит немного не понятные значения


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

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

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

for(int n = 0; n < str; n++)
//    matr[n] = n++;  // неправильно
    matr[n] = n+1;  // правильно

Ну и по условию задачи массив должен быть из 17 элементов. Значит должно быть const int str = 17;

→ Ссылка
Автор решения: Harry

Посмотрим ваше заполнение массива:

for (int n = 0; n < str; n++)
{
    matr[n] = n++;
}

Пройдем руками пару итераций... Итак, n = 0, далее matr[0] = 0, потом n увеличивается в теле цикла, потом - в заголовке... На следующую итерацию n==2, и мы заполняем matr[2]. matr[1] остался с мусором внутри...

Как исправить, догадываетесь?

Лично я бы записал вместо

for (int n = 0; n < str; n++)
{
    matr[n] = n++;
}

вот это:

for (int n = 0; n < str; matr[n] = n++);
→ Ссылка