共有n个人,报数为m,
分为两种情况假如:
1.m<n的n-m以后(包含m)人就会被淘汰;
2.m>n的时候,就要n%m结果的人被淘汰;
但是在1处理以后,就变成了第二种情况, 所以两种情况下都是在处理第二种情况;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class PaiDui {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入整数");
int people = scanner.nextInt();
int num = scanner.nextInt();
stand(people, num);
}
/***
* 处理结果;
*/
public static void stand(int people, int number) {
//判断小于0 的数;
if (people < 0 || number < 0) {
System.out.println("请输入大于0的数");
return;
}
List<Integer> pList = new ArrayList<Integer>();
//声明一个删除队列;
List<Integer> subList = new ArrayList<Integer>();
//产生一个队列;(报数的队列)
for (int i = 1; i <= people; i++) {
pList.add(i);
}
int deletPeole = people;
//条件:知道剩下最后一个人的时候,停止循环;
while (pList.size() != 1) {
//第一种情况的处理;
if (number < deletPeole && number > 1) {
for (int i = number; i <= people; i++) {
subList.add(i);
}
//删除的对象;(打印下删除的数);
System.out.print("删除的元素");
bianli(subList);
} else if (number == deletPeole) {
//添加最后一个元素;(相等情况的处理)
subList.add(pList.get(pList.size() - 1));
} else if (number == 1) {
//m=1的处理;
for (int i = 1; i <= people - 1; i++) {
subList.add(i);
}
}
int in = detelet(number, deletPeole);
//第二种情况的处理
if (number > 2) {//number 为2 是已经删除剩余一个元素;
if (in == 0) {
subList.add(pList.get(pList.size() - 1));
} else if (in != 0) {
subList.add(pList.get(in - 1));
}
}
pList.removeAll(subList);
subList.clear();
System.out.print("现在集合中的元素:");
bianli(pList);
deletPeole = pList.size();
}
System.out.println("此时站着的是第" + pList.get(0) + "人");
}
//产生需要删除数的位置;
public static int detelet(int number, int people) {
int i = 0;
if (people < number) {
i = number % people;
}
System.out.println("删除的位置:" + i);
return i;
}
/***
* 打印队列;
* @param pList
*/
public static void bianli(List<Integer> pList) {
for (int i = 0; i < pList.size(); i++) {
System.out.print(pList.get(i) + " ");
}
System.out.println();
}
}