约瑟夫环问题,例如POJ_2746,递推式求解N人(0开始编号)报M数出圈的最后胜利者,参考博客
思路:
- f[1] = 0;当一个人的时候,出队人员编号为0,程序中对应s的初始值
- f[n] = (f[n-1] + m)%n;m表示每次数到该数的人出列,n表示当前序列的总人数
#include <stdio.h>
int main(){
int n, m, i, s = 0;
printf ("N M = ");
scanf("%d%d", &n, &m);
for (i = 2; i <= n; i++)
s = (s + m) % i;
printf ("\nThe winner is %d\n", s);
return 0;
}