2301_79978294 2023-12-27 17:20 采纳率: 88.9%
浏览 3
已结题

Josephus问题

如图所示的报数问题,请各位看看如何补全这串程序,谢谢了。就在图片所示的代码后面补写

img

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-12-27 20:37
    关注

    【以下回答由 GPT 生成】

    #include <iostream>
    #include <list>
    
    using namespace std;
    
    int josephus(int n, int k) {
        list<int> people;
        for (int i = 1; i <= n; i++) {
            people.push_back(i);
        }
    
        list<int>::iterator current = people.begin();
        while (people.size() > 1) {
            for (int count = 1; count < k; count++) {
                current++;
                if (current == people.end()) {
                    current = people.begin();
                }
            }
    
            current = people.erase(current);
    
            if (current == people.end()) {
                current = people.begin();
            }
        }
    
        return people.front();
    }
    
    int main() {
        int n;
        cout << "请输入总的人数:";
        cin >> n;
    
        int result = josephus(n, 3);
        cout << "最后剩下的人的编号是:" << result << endl;
    
        return 0;
    }
    

    以上是一个简单的Josephus问题的解决方案,使用了STL中的list容器来模拟围坐成圆圈的人员,通过迭代器来实现报数并删除淘汰的人。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月8日
  • 已采纳回答 12月31日
  • 创建了问题 12月27日