有M个人围成一圈从1开始报数,当报到N或N的倍数的时候,则必须出列,问最后剩余的一个人是谁,他原来的位置是多少?
package test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Vector;
public class Circle {
public static void main(String[] args) {
boolean flag = true;
while (flag) {
System.out.println("请输入一共有多少人排队:");
InputStream
input = System.in;
InputStreamReader
reader = new InputStreamReader(input);
BufferedReader
buffer = new BufferedReader(reader);
try {
String
str = buffer.readLine();
int
num = Integer.valueOf(str);
System.out.println("请输入报到几的倍数的时候开始出列:");
str
= buffer.readLine();
int
index = Integer.valueOf(str);
flag
= false;
getCircle(num,index);
} catch
(NumberFormatException e) {
System.out.println("对不起,您输入的不是数字,请重新输入:");
} catch
(IOException e) {
System.out.println("对不起,您的输入有误,请重新输入:");
}
}
}
public static void getCircle(int elementCount,int
number) {
// flag
用来控制是否还报数,当人数为1时,停止报数
boolean flag = true;
//
currentNum表示目前数到的数目,从1开始数,每一圈的第一个人会接着上一圈的最后一个人数
int currentNum = 0;
// 记录本圈报数过程中移除的人的数目
int count = 0;
// currentCount
表示本圈数到的数目,从1开始,数完一圈后此数目为清零
int currentCount = 0;
// currentListSize
表示本圈开始的时候一共还剩下多少个人
int currentListSize = 0;
// list 用以表示围成的圈
// listPosition
用来最后剩余元素所在的位置
Vector list = new
Vector();
Vector listPosition = new
Vector();
//
将元素按顺序装配到list和listPosition里面
for (int i = 1; i <=
elementCount; i++) {
list.add("people"
+ i);
listPosition.add("people"
+ i);
}
while (flag) {
//
得到本次数数的时候本圈一共还有多少人
currentListSize
= list.size();
if
(currentListSize != 1) {
//
for循环表示一圈的报数过程,当人数的数量为1时将不再报数
//
一圈报数开始前,将记录本圈报数过程的人数计数器清零
currentCount
= 0;
//
将记录本圈移除人数的计数器清零
count
= 0;
for
(int j = 0; j < currentListSize; j++) {
//
开始报数
currentNum++;
System.out.println("现在开始报数为:"
+ currentNum);
//
记录本圈报数的人数
currentCount++;
//
判断该人目前所报的数是否能被3整除,如果条件成立则移除该人
if
(currentNum % number == 0) {
System.out.println("本次移除的人为:"
+
list.get(currentCount - count - 1));
list.remove(currentCount
- count - 1);
count++;
}
}
} else
{
flag
= false;
System.out.println("最后剩余的人为:"
+ list.get(0));
System.out.println("最后剩余的人的原来的位置为:"
+
listPosition.indexOf(list.get(0)));
}
}
}
}
加载中,请稍候......