HUFEOJ正在加载中...

1598: A023双链表:约瑟夫环问题

金币值:1 定数:1 时间限制:1.000 s 内存限制:128 M
正确:85 提交:211 正确率:40.28% 命题人:
点赞量:0 收藏量:0 题目类型:程序 知识点: 双链表

题目描述

约瑟夫环问题:N个人围成一圈,编号依次为1~N。从第一个人开始报数,每数到3,那个人将被杀掉,然后重新开始报数。最后剩下一个。

例如N=6,被杀掉的顺序是:3 6 4 2 5。剩下的是:1。

请设计一个算法实现求解剩下的那个编号。要求运用双链表。算法描述如下:


  1. 用1~N构建带头结点的双链表L。
  2. 设置整数变量m用于报数,初始值为0;设置指针变量p用于轮询L,初始值为L的头结点。
  3. 如果L不是仅有首结点,循环执行第4步;否则,输出首结点,算法结束。
  4. m++,p往右移动,如果p移动之前已经是尾结点,则p跳到首结点。此时,如果m等于3,则删除p结点,m重置为1,p移到下一个结点。




输入格式

一个整数N(1<=N<10000)

输出格式

一个整数

输入样例    复制

6

输出样例    复制

1