本帖最后由 黎志勇 于 2014-7-31 10:55 编辑
ArrayList容易点呗,想想如果有10000个人在玩,玩到后面剩下100人,如果只改状态的话,后面不是都要去判断那已经被更改为“出列”状态的9900人么,这些判断效率很低吧。
- package test;
- import java.util.ArrayList;
- import java.util.List;
- public class Test6 {
- public static void main(String[] args) {
- game(100,14);
- }
-
- public static void game(int person,int num){
- System.out.println(person+"人开始游戏");
- List<Integer> list = new ArrayList<>();
- for (int i = 1; i <= person; i++) {
- list.add(i);//构造列队
- }
- int count = 0;//下一个要数的数字,因为没开始,初始化为0
- int pos = -1;//当前列队中,下一个要报数的人在列队中的位置,首编号为0,因为还没开始,初始化为-1
- while (list.size()>1) {
- //确定这次要报的数字
- if (count==num) {
- count = 1;
- } else {
- count++;
- }
- //确定要报数的人在列队中的位置
- if (pos==list.size()-1) {
- pos = 0;
- } else {
- pos++;
- }
- System.out.println(list.get(pos)+"号在数"+count);//报数
- if(count == num){
- System.out.println("---------"+list.get(pos)+"数到"+count+",被踢出去");
- list.remove(pos);
- pos--;//因为数到14的人被踢出去,下一个会将这个位置补上,这个位置要再利用一次,所以减1回滚
- }
- }
- System.out.println("游戏结束,剩下的是"+list.get(0));
- }
- }
复制代码
|