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まで)ために使用できる算術関係/ C++トリックがあります。
例えば:
範囲 = 5 の場合
0 1 2 3 4 3 2 1 0 1 2 3 4 3 2 1 0...................... 0 1 2 3 など
以下のプログラムでは、特定の範囲内で順方向/逆方向を繰り返すために 2 つのアプローチを使用しました。
しかし、私は興味があります-特定の範囲内で順方向と逆方向を反復する最良の方法(C++トリック/数学関係)はありますか?.
#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;
}