Fork me on GitHub

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

}

 

posted @ 2015-04-13 00:51  森林森  阅读(2142)  评论(0编辑  收藏  举报