约瑟夫环问题

简介: 使用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;
}
相关文章
|
9月前
|
存储 算法
|
5月前
约瑟夫环问题的几种解法
约瑟夫环问题的几种解法
74 0
|
6月前
|
算法
约瑟夫环问题(三种方法)
约瑟夫环问题(三种方法)
94 0
|
9月前
|
Java
(五)Java数据结构之循环链表解决约瑟夫(Josephus)环问题
(五)Java数据结构之循环链表解决约瑟夫(Josephus)环问题
65 0
|
10月前
|
算法 索引 Python
细究“约瑟夫环”
细究“约瑟夫环”
77 0
约瑟夫环
题目: 已知n个人(以编号1,2,3--n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人有出列;以此规律重复下去,知道圆桌周围的人全部出列。输出出列顺序和最后剩下的人。
74 0
|
算法 Java
算法 | 链表的应用,约瑟夫问题
算法 | 链表的应用,约瑟夫问题
100 0
算法 | 链表的应用,约瑟夫问题