Почему мы присваиваем arr [i] новое значение, когда оцениваем значение arr [arr [i]]? - PullRequest
1 голос
/ 03 мая 2020

Возникает следующий вопрос: переставить массив так, чтобы arr[i] = i, и, если я не присутствую в массиве, установить его на -1. Вот решение вопроса:

int main() {
    int arr[] = {-1, -1, 6, 1, 9, 3, 2, -1, 4, -1};
    int n = sizeof(arr) / sizeof(arr[0]);
    for (int i = 0; i < n;) {
        if (arr[i] >= 0 && arr[i] != i)
            arr[arr[i]] = (arr[arr[i]] + arr[i]) -
                          (arr[i] = arr[arr[i]]);
        else
            i++;
    }

    for (int i = 0; i < n; i++)
        printf("%d ", arr[i]);
    return 0;
}

Я не понимаю, что означает строка arr[arr[i]] = (arr[arr[i]] + arr[i]) - (arr[i] = arr[arr[i]]). Почему мы присваиваем arr[i] новое значение?

Почему бы нам не вычесть напрямую?

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