约瑟夫环及其变体

1.问题描述

q1.已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。

q2.已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;原先编号为n的数是第几个出列的。

2.编程实现

q1 solution:

#include <iostream>
#include <queue>
using namespace std;
int main()
{
    int n,m,k;
    cin >>n>>m>>k;
    queue<int> q;
    for(int i=k;i<=n;i++)
        q.push(i);
    for(int i=1;i<k;i++)
        q.push(i);
    while(q.size()>1)
    {
        for(int i=0;i<m-1;i++)
        {
            q.push(q.front());
            q.pop();
        }
        q.pop();
    }
    cout<<q.front()<<endl;
    return 0;
}

q2 solution:

#include <iostream>
#include <queue>
using namespace std;
int main()
{
    int n,m,k;
    int res=0;
    cin >>n>>m>>k;
    queue<int> q;
    for(int i=k;i<=n;i++)
        q.push(i);
    for(int i=1;i<k;i++)
        q.push(i);
    while(q.size()>1)
    {
        for(int i=0;i<m-1;i++)
        {
            q.push(q.front());
            q.pop();//删除第一个元素
        }
        res++;
        if(q.front()==n)
            break;
        else
            q.pop();
    }
    cout<<res<<endl;
    return 0;
}
全部评论

相关推荐

后端实习中的&nbsp;“好需求”,核心定义是能支撑面试深度讨论、可向外延伸多维度知识点的需求——&nbsp;本质是能让你在面试官拷打时,有足够空间展现技术积累、解决问题的能力,而非仅完成简单&nbsp;CRUD。结合面试反推逻辑,具体可分为三类,且都具备&nbsp;“可延伸、有讨论点”&nbsp;的共性。本质上是这个需求要支撑你能给面试官吹牛逼。典型的垃圾需求:或许有的同学可能还不理解什么叫做可以吹牛逼的需求,我举一个最简单的反例,很多同学写苍穹外卖的时候,总爱把一个需求写到简历上:&nbsp;&nbsp;基于OSS处理用户上传图片,获取OSS返回URL,实现用户远程上传图片。这就是个最典型的垃圾需求。因为你发现论代码链路,他没什么可讲的。论各种新潮技术,他也...
反装笔大队长:分情况吧。需求分业务需求和技术需求,技术需求你说的是对的。像CRM、OA、NC等等,这些业务系统很多时候对技术要求并不高的,不可否认的是 这些需求还是很不错的。 NC系统的进销存。实际上只是对仓库、库位、库存量、入库出库单价、数据报表等数据的统计与计算。CRM的市场活动、人面画像分析与统计、客户信息管理等,这些无非都是一些增删改查。对于业务需求面试官通常都是问你对业务的理解与过往对该业务的处理方案,并不会死磕技术。技术肯定是多多益善,但在业务开发中 正在有意义的是你的经历。
投递字节跳动等公司7个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务