使用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;
}