1598: A023双链表:约瑟夫环问题
金币值:1
定数:1
时间限制:1.000 s
内存限制:128 M
正确:85
提交:211
正确率:40.28% 命题人:
题目描述
约瑟夫环问题:N个人围成一圈,编号依次为1~N。从第一个人开始报数,每数到3,那个人将被杀掉,然后重新开始报数。最后剩下一个。
例如N=6,被杀掉的顺序是:3 6 4 2 5。剩下的是:1。
请设计一个算法实现求解剩下的那个编号。要求运用双链表。算法描述如下:
- 用1~N构建带头结点的双链表L。
- 设置整数变量m用于报数,初始值为0;设置指针变量p用于轮询L,初始值为L的头结点。
- 如果L不是仅有首结点,循环执行第4步;否则,输出首结点,算法结束。
- m++,p往右移动,如果p移动之前已经是尾结点,则p跳到首结点。此时,如果m等于3,则删除p结点,m重置为1,p移到下一个结点。
输入格式
一个整数N(1<=N<10000)
输出格式
一个整数
输入样例 复制
6
输出样例 复制
1