练习题---报数游戏(圆圈中最后剩下的数字)---用Java实现

mac2024-04-05  32

题目描述:有30个人,从第一个人开始依次报数(从队头到队尾,接着从队头开始),数字范围从1到9,报数字9的人出列。假定最后剩下15个人,求这15个人一开始在队列中的位置。

 

代码:

import java.util.ArrayList; //30个人,编号0-29,从第一个人开始从1开始数数,将数到9的人移除。要剩下15个人,看剩下的人原先的位置是什么 public class CountTurns { public static void main(String[] args) { CountTurns test = new CountTurns(); test.func1(30, 9, 15); } /** * 人数为num,每数到turn,对应的人出列 * @param num * @param turn * @param rest 剩下rest个人 */ private void func1(int num, int turn, int rest) { //check param if(num<=0 || turn<=0 || rest<0) return; ArrayList<Node> list = new ArrayList<>(); for(int i = 0; i<num; i++) {//10个人 Node node = new Node(i); list.add(node); } int cur = -1;//用来记录数到的数字 int pos = -1;//记录某节点在队列中对应的下标 while(list.size()>rest) { pos++; if(pos == list.size()) { pos = 0; } cur++; if(cur==turn-1) { list.remove(pos); pos--; cur = -1; } } for(int j = 0; j<rest; j++) { System.out.println(list.get(j).pos); } } } class Node{ public int pos; public Node(int pos) { super(); this.pos = pos; } }

结果:

最新回复(0)