有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
public class Test10 {
public static void main(String args[]) {
CirclePerson nowPerson=new CirclePerson(100, null);//首先定义最后一个编号的人
for (int i = 99; i > 0; i--) {//生成所有人并形成单链表
CirclePerson temp=nowPerson;
nowPerson=new CirclePerson(i, temp);
}
CirclePerson fstPerson=nowPerson;//保存第一个人为了赋给最后一个人的next形成环形链表
while (nowPerson.getNumber()!=100) {//链表前溯找到最后一个人
nowPerson=nowPerson.getNext();
}
nowPerson.setNext(fstPerson);//将第一个人作为最后一个人的下一个人
int count=0;
while (!nowPerson.getNext().equals(nowPerson)) {//开始进行报数遇到14跳过重新从1报数,直到就剩一个人
count++;
if (count==14) {
nowPerson.setNext(nowPerson.getNext().getNext());
count=1;
}
nowPerson=nowPerson.getNext();
}
System.out.println("最后剩下的是:"+nowPerson.getNumber());
}
}
class CirclePerson//定义单链表形式的人 成员有编号和下一个人
{
int number;
CirclePerson next;
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public CirclePerson getNext() {
return next;
}
public void setNext(CirclePerson next) {
this.next = next;
}
public CirclePerson(int number, CirclePerson next) {
super();
this.number = number;
this.next = next;
}
}
运用C++中指针思想,数据结构环形链表。。。。作为一个老C++程序员的执着。。。 |
|