首页 > 其他分享 >C. DS循环链表—约瑟夫环 (Ver. I - B)

C. DS循环链表—约瑟夫环 (Ver. I - B)

时间:2024-11-01 23:46:20浏览次数:5  
标签:node head Ver int len next 链表 出列 DS

题目描述

N个人坐成一个圆环(编号为1 - N),从第S个人开始报数,数到K的人出列,后面的人重新从1开始报数。问最后剩下的人的编号。

例如:N = 3,K = 2,S = 1。2号先出列,然后是1号,最后剩下的是3号。

测试数据有多组,

每组包括3个数N、K、S,表示有N个人,从编号为S的人开始,数到K出列。

输入

测试数据有多组

每组包括3个数N、K、S,表示有N个人,从第S个人开始,数到K出列。(2 <= N <= 10^3,10^3 < K <= 10^9,  1 <= S <= N)

输出

出列的人的编号

输入样例1:

13 3 1
3 2 1

输出样例1:

3 6 9 12 2 7 11 4 10 5 1 8 13 
2 1 3 

AC代码:

#include <iostream>
using namespace std;
class node
{
public:
    int data;
    node* next;
    node():data(0),next(nullptr){}
};

class linklist
{
    int len;
    node* head;
public:
    linklist()
    {
        head=new node;
        head->data=1;
        head->next=head;
    }
    void create(int n)
    {
        node* tail=head;
        for(int i=2;i<=n;i++)
        {
            node* p=new node;
            p->data=i;
            tail->next=p;
            p->next=head;
            tail=p;
        }
        tail->next=head;
        len=n;
    }
    void print(int k,int s)
    {
        node* p=head;
        for(int i=1;i<s;i++)
        {
            p=p->next;
        }
        while(len)
        {
            int k1=k;
            k1=k1%len+len;
            for(int i=1;i<k1-1;i++)
            {
                p=p->next;
            }
            node* q=p->next;
            cout<<q->data<<" ";
            p->next=q->next;
            delete q;
            p=p->next;
            len--;
        }
        cout<<endl;
    }

};
int main()
{
    int n,k,s;
    while(cin>>n>>k>>s)
    {
        linklist L;
        L.create(n);
        L.print(k,s);
    }
    return 0;
}

标签:node,head,Ver,int,len,next,链表,出列,DS
From: https://blog.csdn.net/2401_85560805/article/details/143435872

相关文章

  • 链表和数组的插入删除时间复杂度都是o(n),为什么说链表效率高
    链表和数组的插入删除时间复杂度都是o(n),链表效率高的原因:1.动态内存分配;2.插入和删除操作的局部性;3.避免数组的扩容和复制;4.无需移动大量数据;5.适用于频繁的随机插入和删除;6.简化数据结构维护。链表的节点可以在运行时动态分配内存,而数组在创建时需要分配固定大小的内存。......
  • prometheus源码分析:discovery自动发现
    discovery支持文件、http、consul等自动发现targets,targets会被发送到scrape模块进行拉取。一.整体框架discovery组件通过Manager对象管理所有的逻辑,当有数据变化时,通过syncChannel将数据发送给scrape组件。discovery组件会为每个Job_name创建一个provider对象,它包含Discover对......
  • MindSearch踩坑心得
    MindSearch允许llm生成类似jupyternotebook的代码片段自主的规划搜索路径,形成搜索图可以自由的控制最大迭代步数,这种灵活的特性使得的MindSearch搜索效果相比写死的代码要效果好很多。MindSearch代码不多,但是调用很复杂,不行请看这个时序图,请格外关注WebSearchGraph和MindSearch......
  • 不写完整sql,DBeaver如何查询数据?效率翻倍!
    前言我们在使用DBeaver时,最常用的就是查询数据,除了在DBeaver里面直接写完整的sql语句进行查询外,其实还可以用不完整的sql语句来查询,效率翻倍。那么,我们该如何操作呢?如何操作首先,我们还是照旧打开某一张表的数据,这样默认是没有任何查询条件的。当我们需要按照一定的条件查询时,就......
  • 2024网鼎杯线上赛REVERSE02(超详细)
    进入主函数分析代码发现了四段加密,一层一层进行解密第一步:打开进入main函数,然后分析代码第一个加密对dest的八个字节做了乘2加密,密文是s2伪代码下看不全在汇编下看第二步:第二块数据进行了异或加密异或key是XorrLord,然后写脚本进行解密拿到了第一段和第二......
  • 代码随想录|day3 链表 203.移除链表元素、707.设计链表、206.反转链表
    基础知识:代码随想录203.移除链表元素建议:本题最关键是要理解虚拟头结点的使用技巧,这个对链表题目很重要。这里主要记录用虚头的方法。即设置一个虚拟的头指针帮忙解题。先看代码:classSolution{publicListNoderemoveElements(ListNodehead,intval){ Li......
  • LeetCode23:合并K个升序链表
    原题地址:.-力扣(LeetCode)题目描述给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例1:输入:lists=[[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4,2->6]将它们......
  • Elasticsearch Query DSL创建滚动索引(生命周期策略)
    创建生命周期策略,并指定索引文档数量为10时创建新的索引:PUT_ilm/policy/roll-policy-10{"policy":{"phases":{"hot":{"min_age":"0s","actions":{"rollover":{......
  • 链表和数组的区别
    链表和数组是两种常用的数据结构,本文旨在详细比较链表和数组的区别包括:1.存储方式不同;2.内存利用不同;3.访问元素的效率不同;4.插入和删除操作的效率不同;5.内存分配的灵活性不同;6.应用场景不同。通过这些比较,读者将更深入地理解两者的特点,以及它们在不同应用场景下的最佳使用方法。......
  • 单链表题+数组题(快慢指针和左右指针)
    @目录说明:本文章用于“单链表题+数组题”“链表”知识一、案例说明(使用快慢指针)问题1.1判断链表是否有环问题1.2:已知链表有环,请返回这个环的起点位置问题1.3:寻找无环单链表的中点,要求:如果偶数个数以左面一个节点为中点问题1.4:寻找无环单链表的中点,要求:如果偶数个数以右面一个节......