约瑟夫环公式

csdn
 
定义f(N,M)表示一共N个人,编号为0 ~ N - 1,每次报数为M的人被踢出去,得到的最后的优胜者(只剩下一个人)的标号是多少
则有递推公式:
$ f(N, M) = (f(N - 1, M) + M) % N $
 
code:

//先把下标映射成0 ~ N - 1
int p = 0; //只剩下一个人的优胜者下标
for(int i = 2; i <= N; i ++) {
  p = (p + M) % i;
}
return p + 1;  //如果题目中下标是1 ~ N,这里要返回映射值
posted @ 2022-08-22 09:57  兮何其  阅读(119)  评论(0)    收藏  举报