Как считать по кругу, начиная сначала или с конца если выходим за пределы диапазона?
Мне нужно обращаться к элементам массива по кругу, если мы выходим за пределы массива. Или по другому "как считать по кругу".
Допустим у нас диапазон чисел от 0 до 6 [0, 1, 2, 3, 4, 5, 6]. И если прибавляя или вычитая мы выходим за пределы этого диапазона, то продолжать счет сначала или с конца.
Допустим текущее число 5. Мне нужно прибавить 4 и начать считать с начала (т.к. мы выходим за пределы диапазаона), т.е. должно получиться 2. Или наоборот текущий элемент 3 и нужно вычесть 6 и получить 4. Но я не понимаю как это оформить в виде кода, т.е. сам алгоритм не могу найти. Мне требуется подобным образом манипулировать индексами массива. Но это уже не важно мне бы сам алгоритм. Кто нибудь может привести пример на любом ЯП или псевдокоде.
Ответы (1 шт):
Если есть диапазон 0..N-1, то "по кругу" — это по модулю N.
Допустим текущее число 5. Мне нужно прибавить 4 и начать считать с начала (т.к. мы выходим за пределы диапазаона), т.е. должно получиться 2.
Ну так и делаем, (5+4)%7 = 9%7 = 2...
Если нужно в обратную сторону:
(3-6)%7 = (3-6+7)%7 = 4
Т.е. сначала приводим к положительному значению, потому что операция остатка от деления для отрицательных чисел работает не так, как нам надо!