高子最棒! 2024-09-13 19:34 采纳率: 0%
浏览 2

约瑟夫问题变形求解大家帮帮我

img

img


有没有人看看怎么做😭,我的在VS2022可以编译成功,但是在有的变压器成功不了,怎么办

  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-13 19:35
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    要解决这个约瑟夫问题,我们可以通过实现一个循环来遍历所有的人,并根据给定的规则进行处理。下面是一种可能的实现方式:

    #include<iostream>
    using namespace std;
    
    void josephus(int n, int k, int m) {
        // 准备数组存储当前的人数
        int people[n];
        for (int i = 0; i < n; ++i) {
            people[i] = i + 1;
        }
    
        while (true) {
            // 每次循环都更新当前的人数
            for (int i = 0; i < n - 1; ++i) {
                if (people[i] % m != 0) {
                    people[i]++;
                }
            }
    
            // 输出当前的人数序列
            for (int i = 0; i < n; ++i) {
                cout << people[i] << " ";
            }
            cout << endl;
    
            // 判断是否到达终点
            if (people[n-1] >= n) {
                break;
            }
        }
    }
    
    int main() {
        int n, k, m;
        cin >> n >> k >> m;
        josephus(n, k, m);
        return 0;
    }
    

    这段代码首先定义了一个名为josephus的函数,它接受三个参数:总人数n,起始位置k,以及结束位置m。函数内部,我们初始化一个长度为n的数组people,并将每个人的初始位置设置为其编号加1。

    接下来,我们通过一个无限循环来迭代所有的元素。在每次迭代中,我们都检查当前的人数是否能被m整除。如果是,则将当前的人数增加1。这样做的目的是确保每个人都会按顺序报数,并且当某个人在报完数后,会轮到下一个人在其后面报数。

    当满足条件时,我们将当前的人数打印出来,并判断是否已经到了最后一个位置。如果不是,就再次调用josephus函数。否则,我们就跳出循环,程序结束。

    在这个示例中,我们没有使用任何特定的编程语言或环境,而是展示了基本的算法思想。如果你有特定的编程环境或者想要尝试其他编程语言,可以根据实际情况调整代码。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月13日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见