酷代码 AI
菜单
服务商

解密约瑟夫问题:n 人围圈报数,最后剩下的是谁?

这是一个约瑟夫问题。 给定 n 个人,从第 1 个人开始报数,每次数到 m 的人出局,下一个人重新从 1 开始报数,直到只剩一人。 题目中 m 固定为 3。 数学递推公式(约瑟夫问题 m=3 的情况): 设 f(n) 表示 n 个人时最后剩下的人的编号(编号从 0 到 n-1)。 递推关系: f(1) = 0 f(n) = (f(n-1) + 3) % n 如果编号从 1 到 n,则结果为 f(n) + 1。 代码实现(C++): ```cpp #include <iostream> using namespace std; int main() { int n; cin >> n; int last = 0; // f(1) = 0 for (int i = 2; i <= n; i++) { last = (last + 3) % i; } cout << last + 1 << endl; return 0; } ``` ######[AI问答 | 244点数解答 | 2025-12-16 18:06:37]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]