一群人围成一圈从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));

    }



}

 

你可能感兴趣的:(个人)