约瑟夫环公式
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,这里要返回映射值

浙公网安备 33010602011771号