java编程,有n个人围成一圈,顺序排号,从一号到n号,从第一个开始报数,(从1报到3)凡报到3的

java编程,有n个人围成一圈,顺序排号,从一号到n号,从第一个开始报数,(从1报到3)凡报到3的人就出局,退出圈子,问最后留下的是第几号?比如:输入5输出4

这么经典的面向对象题目    ä»¥ä¸‹ä»£ç ä»…供参考

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
int n;
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个正整数:");
n = scanner.nextInt();
scanner.close();

PersonQuan personQuan = new PersonQuan();
Person person;
for (int i = 1; i <= n; i++) {
person = new Person(i);
personQuan.addPerson(person);
}

n = 0;
person = personQuan.first;
while (personQuan.first != personQuan.last) {
n++;
if (n % 3 == 0) {
//System.out.println("第" + n/3 + "次移除编号:" + person.id);
personQuan.removePerson(person);
}
person = person.right;
}

System.out.println("最后留下的是第" + personQuan.first.id + "号");

}

}

class Person {
int id;
Person left;
Person right;

public Person(int id) {
this.id = id;
}

}

class PersonQuan {

Person first;
Person last;

public void addPerson(Person person) {
if (first == null) {
first = person;
last = person;
person.left = person;
person.right = person;
} else {
last.right = person;
person.left = last;
person.right = first;
first.left = person;
last = person;
}
}

public int removePerson(Person person) {
if (first == last) {
return 0;
}

if (person == first) {
last.right = person.right;
person.right.left = last;
first = person.right;
} else if (person == last) {
first.left = person.left;
person.left.right = first;
last = person.left;
} else {
person.left.right = person.right;
person.right.left = person.left;
}
return 1;
}

}追问

这么复杂啊 看不得没太懂

这个是为什么

追答

不要方法包里   放到default package里面

追问

这个用到链接表数据结构的知识吗?我还没学过,看不太懂哦

追答

额 就是一道 面向对象的练习题 跟数据结构的没什么关系 以对象的思维去考虑就很好理解了

温馨提示:答案为网友推荐,仅供参考