Проблема состоит в том, что ваша последовательность if
операторов должна быть одним if ... else if ... else
оператором.
if (i == 0)
...
else if (i==N-1)
...
else
...
То, что предыдущее условие if
было оценено как true, не останавливает код послеif
инструкция от выполнения, если вы не используете else
.Таким образом, условие в вашем третьем операторе if
выполняется даже при i == 0
или i == N - 1
, что приводит к выходу за пределы массива и аварийному завершению.
Также
int attackArray[N],defArray[N];
не является допустимым C ++, потому что все размеры массива должны быть константами времени компиляции.Вы явно используете компилятор, который не заботится, но вы должны его использовать, поэтому используйте его вместо
vector<int> attackArray(N), defArray(N);
Наконец, в ваших различных условиях много дублированного кода.Вы можете сильно упростить, добавив пару дополнительных переменных для следующего и предыдущего значения i
.Например,
int nexti, previ;
if (i == 0)
{
nexti = 1;
previ = N - 1;
}
else if (i == N - 1)
{
nexti = 0;
previ = N - 2;
}
else
{
nexti = i + 1;
previ = i - 1;
}
if (defArray[i] > attackArray[nexti] &&
defArray[i] > attackArray[previ] &&
defArray[i] > attackArray[nexti] + attackArray[previ])
...