gpt4 book ai didi

c++ - 有没有在给定范围内迭代正向和反向的最佳方法(数学/C++技巧)

转载 作者:搜寻专家 更新时间:2023-10-31 01:04:03 24 4
gpt4 key购买 nike

使用 C++ 中的模运算(或)(%) 运算符,我们可以循环遍历具有范围的连续数字。

例如:

如果范围是 5(或)模 5 那么我们可以循环

0 1 2 3 4 0 (5) 1(6) 2(7) 3(8) 4(9) 0(10) .....................0 1 2 3 等。

问题:

在类似的意义上,我们可以使用任何算术关系/C++ 技巧在一定范围内向前移动递增的数字(直到上限)和反向移动递减的数字(直到下限或 0)。

例如:

如果范围 = 5 那么

0 1 2 3 4 3 2 1 0 1 2 3 4 3 2 1 0 .....................0 1 2 3 等

在下面的程序中,我使用了两种方法在给定范围内向前/向后迭代。

但我感兴趣的是 - 是否有任何最佳方法(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;
}

最佳答案

你可以像这样使用绝对值函数:

int i = range;
int a = range;
while(true) {
// 0 1 2 3 4 3 2 1 0 .......... (Forward and Reverse in the range 0 - 4)
a = abs(i-range);
std::cout<< a;
i = (i+1)%(range*2); // Modulo
}

基本上,您将范围加倍,减去范围的一半(因此它从 -range 变为 +range),然后取绝对值。

编辑:固定代码从零开始而不是范围。

关于c++ - 有没有在给定范围内迭代正向和反向的最佳方法(数学/C++技巧),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24633001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com