约瑟夫环问题

简介: 使用queue<int>q记得加上头文件#include<queue>

使用queue<int>q记得加上头文件#include<queue>

每次移动的个数相等&&输出最后剩下的编号

剑指 Offer 62. 圆圈中最后剩下的数字 - 力扣(LeetCode)

8.1.png

class Solution {
public:
    int lastRemaining(int n, int m) {
        int p=0;
        for(int i=2;i<=n;i++)//从2开始,并且< =n
        {
            p=(p+m)%i;
        }
        return p;
    }
};

.每次移动的个数相等&&输出每次删除的编号


3559. 围圈报数 - AcWing题库

8.2.png

9.1.png

也不行

9.2.png

正确写法(对于这种 输出被删除的元素)

#include<iostream>
#include<queue>//头文件
using namespace std;
int t,n,sum;
int main(){
    cin>>t;
    while(t--){
        queue<int> q;
        cin>>n;
        sum=0;
        for(int i=1;i<=n;i++) q.push(i);
        while(q.size()){
            int x=q.front();
            q.pop();
            sum++;
            if(sum==3)//关键点
            {
                printf("%d ",x);
                sum=0;
            }else q.push(x);
        }
        puts("");
    }
    return 0;
}

每次移动的个数 不 相等

4400. 玩游戏 - AcWing题库

视频讲解: AcWing 4400. 玩游戏(AcWing杯 - 周赛) - AcWing

9.3.png

image.png

#include <iostream>
#include <queue>
using namespace std;
const int N = 100010;
int a[N];
int main()
{
    int n,k;
    cin>>n>>k;
    queue<int> q;
    for (int i = 1; i <= n; i ++ )//n个小朋友,所以i<  n
    {
        q.push(i);
    }
    while(k--)
    {
        int a;
        cin>>a;
        a%=q.size();
        for (int i = 0; i < a; i ++ )//注意是i<   a
        {
            q.push(q.front());
            q.pop();
        }
        cout<<q.front()<<' ';
        q.pop();
    }
    return 0;
}
相关文章
|
1月前
|
机器学习/深度学习
约瑟夫环
【10月更文挑战第11天】
56 5
|
1月前
约瑟夫环问题
约瑟夫环
23 0
|
存储 算法
约瑟夫环问题的几种解法
约瑟夫环问题的几种解法
100 0
|
算法
约瑟夫环问题(三种方法)
约瑟夫环问题(三种方法)
144 0
|
Java
(五)Java数据结构之循环链表解决约瑟夫(Josephus)环问题
(五)Java数据结构之循环链表解决约瑟夫(Josephus)环问题
104 0
|
算法 索引 Python
细究“约瑟夫环”
细究“约瑟夫环”
97 0
|
算法 Java
算法 | 链表的应用,约瑟夫问题
算法 | 链表的应用,约瑟夫问题
130 0
算法 | 链表的应用,约瑟夫问题