约瑟夫环问题

追求适度,才能走向成功;人在顶峰,迈步就是下坡;身在低谷,抬足既是登高;弦,绷得太紧会断;人,思虑过度会疯;水至清无鱼,人至真无友,山至高无树;适度,不是中庸,而是一种明智的生活态度。

导读:本篇文章讲解 约瑟夫环问题,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

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

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

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

约瑟夫环问题

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;
    }
};

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

3559. 围圈报数 – AcWing题库

约瑟夫环问题

坑 

 约瑟夫环问题

也不行 

约瑟夫环问题 

 

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

#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;
}

2.每次移动的个数 不 相等

4400. 玩游戏 – AcWing题库

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

 约瑟夫环问题

约瑟夫环问题

#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;
}

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/131426.html

(0)

相关推荐

发表回复

登录后才能评论
半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!