约瑟夫问题
N个人围成一圈,第一个人从1开始报数,报M的将被杀掉,下一个人接着从1开始报。如此反复,最后剩下一个,求最后的胜利者。
求解过程
单次求解过程
- 单独一人
直接返回1 - 通用过程
| 当前编号 | 执行后编号 |
|---|---|
| 1 | n-m+1 |
| 2 | n-m+2 |
| ... | ... |
| m-1 | n-1(n-m+m-1) |
| m | 0(剔除) |
| m+1 | 1 |
| ... | ... |
| n-1 | n-1-m |
| n | n-m |
int f(int n, int m)
{
return n == 1 ? n : (f(n - 1, m) + m - 1) % n + 1;
}
浙公网安备 33010602011771号