使用getNextIdx函数,我想为数组接收一个新索引,该数组取决于当前索引和该索引处的数组的值。
我希望函数通过将当前索引与该索引处的数组值相加来返回新索引,并以数组大小为单位。

#include<vector>
using namespace std;

int getNextIdx(int currentIdx, vector<int> array) {
    int jump = array[currentIdx];
    int nextIdx = (currentIdx + jump) % array.size();

    return (nextIdx >= 0) ? nextIdx : nextIdx + array.size();
}
int main() {
    vector<int> test = {2, 3, 1, -4, -4, 2};
    int nextIdx = getNextIdx(3, test);
}

示例:如果当前索引为3(第4个元素),并且数组中第4个元素的值为-4,并且数组的大小为6,则该函数应返回5。
问题是我的程序在上面的示例中返回3。

最佳答案

模运算符四舍五入为零(即使对于负数也是如此)。您的数学期望模数朝负或正无穷大取整。参见Modulo operation with negative numbers

int getNextIdx(int currentIdx, vector<int> array){
  int jump = array[currentIdx];
  int nextIdx = currentIdx + jump;
  if (nextIdx < 0)
    nextIdx += array.size();
  if (nextIdx >= array.size())
    nextIdx -= array.size();
  return nextIdx;
}

10-06 04:16