题目的大概意思就是41个人包括A和B,围一个圈,从第一个人开始报数,报到3的人自杀,求AB的安全位置(避免死亡)
先说一下解题思路,这里我是用的循环链表,当然网上也有其他的解题思路
代码实现如下
声明链表结构体
public class Node {
protected Node next;
protected int val;
public Node() {
}
public Node(int val) {
this.val = val;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
public int getVal() {
return val;
}
public void setVal(int val) {
this.val = val;
}
}
找出其中不需要自杀的人的位置,具体代码实现如下
public static void findSafePosition(Node root) {
//传入循环链表
Node p = root;
int count=0;//定义计数器
while (!((p == p.next.next))) { //循环条件,当链表中剩余大于两个时循环{
Node q=p; //q是当前节点
if (count==0){
//如果报数到3,删除节点
q.val=q.next.val;
q.next=q.next.next;
p=q;
}else {
//如果报数不是3,指针后移
count++;
count%=3;
p=p.next;
}
}
System.out.println("The Safe Positions are "+p.val+" and "+p.next.val);
}
运行并测试
public static void main(String[] args) {
//构造循环链表,值为报数顺序
Node root=new Node(1);
Node p=root;//保存头结点
for (int i=2;i<42;i++)//构造链表
{
root.next=new Node(i);
root=root.next;
}
root.next=p;//尾结点指向头结点,变成循环链表
findSafePosition(p);
}
运行结果
The Safe Positions are 40 and 41
所以A和B初始站位在40和41可以避免自杀