约瑟夫问题

Posted on 2024-04-18 14:29  云起  阅读(22)  评论(0编辑  收藏  举报

约瑟夫问题

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;
}

算法详解
一行代码搞定约瑟夫环问题

Copyright © 2024 云起
Powered by .NET 9.0 on Kubernetes