A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

有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++程序员的执着。。。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马