一群人围成一圈从123报数,如果报到3就退出该圈中,直到最后一个人留下来!
package com.pb.demo1; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 一群人围成一圈从123报数,如果报到3就退出该圈中,直到最后一个人留下来! * 约瑟夫的游戏 */ public class Demo1 { public static void main(String[] args) { //声明值一个扫描器的变量 Scanner input =new Scanner(System.in); System.out.println("请输入参数游戏的人数:"); String str=input.next(); //判断是不是数字 String regx="\\d+"; Pattern p=Pattern.compile(regx); Matcher m=p.matcher(str); int num=0; if(m.matches()){ //如果是数字就转换为数字 num=Integer.parseInt(str); }else{ //如果不是数字终止 System.out.println("输入的不是数字:结果为0"); return ; } //为每个人编号 List<Integer> list=new ArrayList<Integer>(); for (int i = 0; i < num; i++) { //编号从一开始 list.add(i+1); } //定义游戏要退出的变量 int cursor=0; //开始游戏只到最后一人是结束 while(list.size()>1){ for (int i = 0; i <list.size(); i++) { //游戏开始游标+1 cursor++; if(cursor%3==0){ list.remove(i); //游标重新开始并归零 cursor=0; //人数-1 i--; } } } System.out.println("集合的大小:"+list.size()); System.out.println("最后的人编号是:"+list.get(0)); } }