登 录
实现代码如下,主要思想循环n-1次,每次出列一个,剩下的即为需要输出的。
附源码:
int GetLast(int n, int m, int p) { if (n <= 0 || m <= 0 || p <= 0) { return -1; } int *pNodeList = new int[n]; if (pNodeList == NULL) { return -1; } for (int i = 0; i < n; i++) { pNodeList[i] = 0; } int iOut = p; for (i = n-1; i > 0; i--) { // 获取每次的循环次数 int iNum = m%(i+1); if (iNum == 0) { iNum = i+1; } for (int j = 0; j < iNum; j++) { while (pNodeList[iOut%n] != 0) { iOut++; } iOut++; } pNodeList[(iOut-1)%n] = 1; } int iResult = 0; for (i = 0; i < n; i++) { if (pNodeList[i] == 0) { iResult = i; break; } } return iResult+1; }
抱歉!评论已关闭.