码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 约瑟夫环(循环列表实现)


    约瑟夫(Joseph)问题的一种描述是:编号为1,2,3,…,n的n个人按顺时针方向围坐一圈。每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数,令其出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新报数,如此下去,直到所有人全部出列为止。试设计一个程序求出出列顺序。

        实验要求

    利用无头结点的单向循环链表存储结构模拟此过程,按照出列的顺序打印出各人的编号。

    测试数据:

        m的初值为20;n=7,7个人的密码依次为:3,1,7,2,4,8,4,首先m值为8(正确的出列顺序应为6,1,4,7,2,3,5)

     实验提示:

        程序运行后,首先要求用户指定初始报数上限值,然后读取各人的密码,可设n<=30,此题所用的循环链表中不需要“头结点”,请注意空表和非空表的界限。

    1. #include//用链表实现约瑟夫环问题 (循环链表)
    2. using namespace std;
    3. typedef struct node
    4. {
    5. int num;
    6. int pwd;
    7. struct node* next;
    8. }Node ,*list;
    9. list Createlist(int n)//创建循环列表
    10. {
    11. list head = NULL,rear=NULL, temp = NULL;
    12. head = rear;
    13. for (int i = 1; i <= n; i++)
    14. {
    15. temp = new node;
    16. temp->num = i;
    17. cin >> temp->pwd;
    18. if (head == NULL)//若为空则赋给头指针
    19. {
    20. head = temp;
    21. }
    22. else
    23. {
    24. rear->next = temp;//接在尾指针后
    25. }
    26. rear = temp;
    27. }
    28. rear->next = head;//尾指针指向头指针
    29. return head;
    30. }
    31. //void Printlist(list l)//打印输出
    32. //{
    33. //list p = l;
    34. //for (int i = 0; i < 14; i++)
    35. //{
    36. //cout << p->num << p->pwd << " ";
    37. //p = p->next ;
    38. //}
    39. //cout << endl;
    40. //}
    41. void Getlist(list l,int n,int m)//约瑟夫环
    42. {
    43. list p = l, q = NULL;
    44. while (p->next != p)//循环直到只剩一个 头尾相指
    45. {
    46. for (int i = 1; i < m; i++)
    47. {
    48. q = p;//保留离开点的上一个节点
    49. p = p->next;
    50. }
    51. cout << p->num<<" ";
    52. m = p->pwd;
    53. q->next = p->next;//剔除该点
    54. p = p->next;//从下一节点重新计数
    55. }
    56. cout << p->num;
    57. }
    58. int main()
    59. {
    60. list l;
    61. int n, m;
    62. cin >> n >> m;
    63. l = Createlist(n);
    64. //Printlist(l);
    65. Getlist(l, n, m);
    66. }

  • 相关阅读:
    强制不允许用户缩放页面
    LQ0274 密码发生器【水题】
    ASP.NET Core - 依赖注入(二)
    hadoop fs,hadoop dfs以及hdfs dfs区别
    Native崩溃说明 so库崩溃、SIGBUS(bad memory access) 和 SIGSEGV(Invalid memory reference)
    Vim编辑器常用命令汇总
    微源股份冲刺上市:上半年利润下滑六成,戴兴科夫妇为实控人
    【华为OD机试python】分割数组的最大差值【2023 B卷|100分】
    解决&nbsp;不生效的问题
    双非本计算机从零开始三年努力能做到什么程度【学习路线回顾&总结&问答】
  • 原文地址:https://blog.csdn.net/qq_74156152/article/details/132819401
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号