Charlie_Parker 2023-08-23 14:56 采纳率: 40%
浏览 7

#c++#沃瑟夫问题,还是会出错,请专家解答

img


#include <bits/stdc++.h>
using namespace std;

const int size = 5001;
int n, m, q[size + 1], front = 1, rear = size;

int main() {

    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        rear = rear % size + 1;
        q[rear] = i;
    }
    int x = 0, i = 1, psum;
    while (rear % size + 1 != front) {
        psum = n - i + 1;
        x++;
        int y = q[front];
        front = front % size + 1;
        m = (i * i) % psum;
        if (!m) {
            printf("%d ", q[rear]), i++;
            x = 0;
            rear --;
        } else if (x == m) {
            printf("%d ", y), i++;
            x = 0;
        } else
            rear = rear % size + 1, q[rear] = y;
    }
    return 0;
}

出错,大家指正指正

  • 写回答

3条回答 默认 最新

  • 睡觉觉觉得 2023-08-23 16:12
    关注

    你可以提交这个代码

    
     
    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int n;
        cin>>n;
        int a[n+1]={0};
        for(int i=1;i<=n;i++) a[i]=i; 
        int num=n;//num为剩余人数 
        int count=1;//count为当前要报的数字 
        int tmp=0;//tmp为当前该哪个位置报数了 
        int l=1;//l表示当前是第几轮 
        while(num!=0)    
        {
            tmp++;
            if(tmp>n) tmp=1;
            int val=pow(l,2);
            if(a[tmp]!=-1)
            {
                if(count==val)
                {
                cout<<a[tmp]<<" ";
                a[tmp]=-1;
                l++;
                num--; 
                count=0;
                }
                count++;
            }
            
            
        }
        return 0;
    }
    
    评论

报告相同问题?

问题事件

  • 创建了问题 8月23日

悬赏问题

  • ¥15 软件工程用例图的建立(相关搜索:软件工程用例图|画图)
  • ¥15 如何在arcgis中导出拓扑关系表
  • ¥15 处理数据集文本挖掘代码
  • ¥15 matlab2017
  • ¥15 在vxWorks下TCP/IP编程,总是connect()报错,连接服务器失败: errno = 0x41
  • ¥15 AnolisOs7.9如何安装 Qt_5.14.2的运行库
  • ¥20 求:怎么实现qt与pcie通信
  • ¥50 前后端数据顺序不一致问题,如何解决?(相关搜索:数据结构)
  • ¥15 基于蒙特卡罗法的中介效应点估计代码
  • ¥15 罗技G293和UE5.3