约瑟夫问题

Posted on   云起  阅读(32)  评论(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;
}

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

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?

随笔 - 119, 文章 - 0, 评论 - 3, 阅读 - 3957

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

点击右上角即可分享
微信分享提示