Задачка по 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 шт):
Вы заполняете не весь массив. В цикл в операции присвоения нельзя делать инкремент, поскольку он изменяет индекс и получается, что вы заполняете значения через 1.
for(int n = 0; n < str; n++)
// matr[n] = n++; // неправильно
matr[n] = n+1; // правильно
Ну и по условию задачи массив должен быть из 17 элементов. Значит должно быть const int str = 17;
Посмотрим ваше заполнение массива:
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++);