Почему добавление отрицательных целых чисел приводит к положительному целому числу в этой программе C ++?

Эта программа в основном проверяет два конца данной последовательности интергеров, добавляет наибольшее из двух к R и изменяет знак конца, который мы не выбрали. Повторяет процесс, пока не останется только один номер (который не добавляется к R). В первой строке входных данных указывается количество промежуточных элементов в последовательности, а в оставшихся — сама последовательность.

Например, если мы введем «5 5 4 3 2 1», мы должны получить «14», потому что только «1» не добавляется к R.

По какой-то причине, когда я ввожу «5 -5 -4 -3 -2 -1», я получаю вывод «10» вместо «-10».

#include <iostream>
using namespace std;

int main(void) {
int N, *L, R = 0, i = 0, d = 0;
cin >> N;
L = new int[N];
for (; i < N; ++i) cin >> L[i];
i = 0;
d = N - 1;
while (d != i) {
if (L[i] > L[d]){
R += L[i];
L[d] *= -1;
++i;
}
else {
R += L[d];
L[i] *= -1;
--d;
}
}
cout << R << endl;
return 0;
}`

-4

Решение

Давайте посмотрим, что происходит во время первых двух итераций. Начнем с:

i = 0
d = 4
L = -5 -4 -3 -2 -1
R = 0

Большой элемент L[d]Итак, мы добавим это, измените знак L[i]и декремент dИтак, теперь мы имеем:

i = 0
d = 3
L = 5 -4 -3 -2 -1
R = -1

Теперь большой элемент L[i]Итак, мы добавим это, измените знак L[d]и приращение i, Итак, теперь мы имеем:

i = 1
d = 3
L = 5 -4 -3 2 -1
R = 4

Как видите, уже после двух итераций результат уже положительный, потому что мы добавили 5 этот раз.

И на всех будущих итерациях мы будем добавлять только числа, которые были сделаны положительными.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]