问题描述:
n个人围成一个圈,每个人分别标注为1、2、...、n,要求从1号从1开始报数,报到k的人出圈,接着下一个人又从1开始报数,如此循环,直到只剩最后一个人时,该人即为胜利者。例如当n=10,k=4时,依次出列的人分别为4、8、2、7、3、10,9、1、6、5,则5号位置的人为胜利者。给定n个人,请你编程计算出最后胜利者标号数。
#include<iostream>
using namespace std;
struct Node{
int val;
Node *next;
Node(int v){ val = v; next = NULL; }
};
//约瑟夫问题
void JOSEPHUS(int n, int k){
Node *p = NULL; //p表示开始指针
Node *current = NULL;
Node *previous = NULL;
for (int i = 0; i < n; ++i){
if (