当前位置: 代码迷 >> Java相关 >> 一群人围成一圈从123报数,如若报到3就退出该圈中,直到最后一个人留下来
  详细解决方案

一群人围成一圈从123报数,如若报到3就退出该圈中,直到最后一个人留下来

热度:26   发布时间:2016-04-22 20:26:47.0
一群人围成一圈从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));    }}

 

  相关解决方案