c++活泼虾 2023-09-11 16:11 采纳率: 66.7%
浏览 17
已结题

3119 - 约瑟夫问题2——oj

3119 - 约瑟夫问题2

题目描述

约瑟夫问题:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1开始报数。

就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入n,m后,输出最后猴王的编号。

输入

每行是用空格分开的两个整数,第一个是 n, 第二个是 m (0 < m,n <=300)。

最后一行是:0 0

输出

对于每行输入数据(最后一行除外),输出数据也是一行,即最后猴王的编号。

样例
输入

6 2
12 4
8 3
0 0

输出

5
1
7

标签
链表
错误代码

#include<bits/stdc++.h>
using namespace std;
int main() {
    int n=1,m=1,a[10000],b[10000],t,k=n,i=1,head=0;
    while(1) {
        cin>>n>>m;
        if(n==0&&m==0)
            break;
        for(i=0; i<n-1; i++) {
            a[i]=i+1;
            b[i]=i+1;
        }
        a[n]=n;
        b[n]=0;
        head=0;
        k=head;
        i=1;
        while(n>1) {
            i++;
            if(i==m) {
                t=b[k];
                b[k]=b[t];
                if(t==head)
                    head=b[k];
                i=1;
                n--;
            }
            k=b[k];
        }
        cout<<a[head]<<endl;
    }
    return 0;
}

有哪个好人能帮助我一下!

  • 写回答

2条回答 默认 最新

  • honestman_ 2023-09-11 17:18
    关注
    
    #include<iostream>  
    using namespace std;  
      
    int josephus(int n, int m) {  
        if (n == 1) return 0;  
        else return (josephus(n - 1, m) + m) % n;  
    }  
      
    int main() {  
        int n, m;  
        cout << "Enter the total number of monkeys: ";  
        cin >> n;  
        cout << "Enter the number m: ";  
        cin >> m;  
      
        cout << "The monkey king is: " << josephus(n, m) + 1 << endl;  
        return 0;  
    }
    

    这个程序首先定义了一个名为 josephus 的函数,该函数通过递归实现约瑟夫环的解决方法。然后在 main 函数中,程序接收用户输入的猴子总数 n 和数到 m 的猴子退出的规则。最后,程序输出猴王的编号。

    注意,由于编号从1开始,因此在输出猴王编号时,我们需要将结果加1。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月22日
  • 创建了问题 9月11日

悬赏问题

  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路