A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. package com.pb.demo1;

  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Scanner;
  5. import java.util.regex.Matcher;
  6. import java.util.regex.Pattern;

  7. /**
  8. * 一群人围成一圈从123报数,如果报到3就退出该圈中,直到最后一个人留下来!
  9. * 约瑟夫的游戏
  10. */
  11. public class Demo1 {

  12.     public static void main(String[] args) {
  13.         //声明值一个扫描器的变量
  14.         Scanner input =new Scanner(System.in);
  15.         System.out.println("请输入参数游戏的人数:");
  16.         String str=input.next();
  17.         //判断是不是数字
  18.         String regx="\\d+";
  19.         Pattern p=Pattern.compile(regx);
  20.         Matcher m=p.matcher(str);
  21.         int num=0;
  22.         if(m.matches()){
  23.             //如果是数字就转换为数字
  24.             num=Integer.parseInt(str);
  25.         }else{
  26.             //如果不是数字终止
  27.             System.out.println("输入的不是数字:结果为0");
  28.             return ;
  29.         }
  30.         //为每个人编号
  31.         List<Integer> list=new ArrayList<Integer>();
  32.         for (int i = 0; i < num; i++) {
  33.             //编号从一开始
  34.             list.add(i+1);
  35.         }
  36.         
  37.         //定义游戏要退出的变量
  38.         int  cursor=0;
  39.         //开始游戏只到最后一人是结束
  40.         while(list.size()>1){
  41.             for (int i = 0; i <list.size(); i++) {
  42.                 //游戏开始游标+1
  43.                 cursor++;
  44.                 if(cursor%3==0){
  45.                     list.remove(i);
  46.                     //游标重新开始并归零
  47.                     cursor=0;
  48.                     //人数-1
  49.                     i--;
  50.                 }
  51.                
  52.             }
  53.         }
  54.         System.out.println("集合的大小:"+list.size());
  55.         System.out.println("最后的人编号是:"+list.get(0));
  56.     }

  57. }
复制代码
不知道还有没人其它的解法

1 个回复

正序浏览
谢谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马