int jos(int n, int k); // n表示总共有多少人, k表示报数的第几个数退出
int main(void)
{
int n,k,s;
printf("请输入总人数和间隔数(中间以空格隔开)\n");
scanf("%d %d", &n, &k);
s = jos(n, k);
printf("获胜者是:%d\n", s);
return 0;
}
int jos(int n,int k)
{// 每次运行都返回当前淘汰出来的位置
int x;
if(n==1) // 当剩下最后一个的时候他就是获胜者
x=1;
else
{// 如果多余一个
x=(jos(n-1,k)+k)%n; // 继续从剩余的这些人中进行选取获胜(%n达到了循环的目的)(这里利用n-1时的淘汰位置加上k是下一个淘汰位置, 此时n又被减少)
if(x==0)
x=n;
}
return x;
}
/*
请输入总人数和间隔数(中间以空格隔开)
37 5
获胜者是:1
Press any key to continue
*/