Почему добавление отрицательных целых чисел приводит к положительному целому числу в этой программе C ++? - PullRequest
0 голосов
/ 08 июня 2018

Эта программа в основном проверяет два конца заданной последовательности интергеров, добавляет наибольшее из двух к 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;
}`

1 Ответ

0 голосов
/ 08 июня 2018

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

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 на этот раз.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...