原题目链接:P1996 约瑟夫问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P1996
思路分析:
实际上这道题是对循环链表的简单考察,在这里我们将问题拆分为三个部分
初始化:
顾名思义,我们需要先初始化一个链表,且内部承装的数据为各自的标号。
如下:
实际上,下面的"NodeLIst(int x)"的部分是对节点初始化的简化,展开的形式如下(类似于定义一个函数)。
实际操作:
第一:我们需要通过循环来将各个节点添加至单向链表中;
第二:我们要将链表中的最后一个元素的pNext设置为根节点(循环链表的初始化);
第三:我们要通过循环找到每次“出局”的节点,输出它的编号,并将该节点移除队列。
补充:
如果对循环的实际次数不太清楚,可以先自己写一个循环来进行实验
终止条件:
实际上终止条件的形式很多:
比如链表为空(所有节点均“出局”);或者“移除”操作的次数(可以使用n--来代替)
这里举一个例子:
得出答案
将以上各部分组合,就得到了我们所需要的代码--