Используя оператор модульной арифметики (или) (%) в C++, мы можем перебирать последовательные числа с диапазоном.
Например:
если диапазон равен 5 (или) по модулю 5, тогда мы можем перебирать
0 1 2 3 4 0 (5) 1(6) 2(7) 3(8) 4(9) 0(10)............0 1 2 3 и т.д.
Вопрос:
В аналогичном смысле существует ли какое-либо арифметическое отношение/трюк С++, который мы можем использовать для перемещения увеличивающихся чисел вперед (до верхней границы) и уменьшения чисел в обратном направлении (до нижней границы или 0) с диапазоном.
Например:
если диапазон = 5, то
0 1 2 3 4 3 2 1 0 1 2 3 4 3 2 1 0.....................0 1 2 3 и т.д.
В приведенной ниже программе я использовал два подхода для итерации вперед/назад в заданном диапазоне.
Но меня интересует: Есть ли лучший способ (трюк С++/Математическое отношение) итерации вперед и назад в заданном диапазоне?.
#include<iostream>
int main() {
int range = 5;
// 0 1 2 3 4 0 1 2 3 4 .....(Cycle through in the range 0 - 4)
int i = 0;
while(true) {
// 0 1 2 3 4 0 1 2 3 4 .....(cycle through in the range 0 - 4)
std::cout<< i;
i = (i+1)% range; // Modulo
// some break condition
}
// 0 1 2 3 4 3 2 1 0 .......... (Forward and Reverse in the range 0 - 4)
// Method 1:
int j = 0;
bool reverse = false;
while(true) {
if(reverse == false) {
if(j < range) {
std::cout << j;
j = j+1;
}
else {
reverse = true;
j = j-1;
}
}
else {
j = j-1;
std::cout << j;
if(j == 0) {
reverse = false;
j = j + 1;
}
}
// some break condition
}
// 0 1 2 3 4 3 2 1 0 .......... (Forward and Reverse in the range 0 - 4)
// Method 2:
// Using modulo (if the range is big value then this is not good approach)
int limit[8] = {0,1,2,3,4,3,2,1};
int k = 0;
while(true) {
std::cout<< limit[k];
k = (k+1)%8;
// some break condition
}
return 0;
}