大神们帮帮忙呗!!!!

  1. 幼儿园的小朋友们刚学习了如何数数,阿姨在下课时组织大家一起玩游戏。规则如下:所有的小朋友绕成一圈,顺序排号,从第一个小朋友开始报数,凡是报到固定数字(例如3)的,都退出该游戏,直到只剩下一位小朋友游戏才中止。

public static void main(String[] args) {
int n=5;//总儿童数
int m=3;//念到退出该游戏的数字
int nn=1;
int mm=1;

    Map map=new HashMap();//创建数组
    for (int i = 1; i <n+1; i++) {
        map.put(i, i);//为数组添加项
    }
    while(map.size()>1){
        if(mm==3){
            map.remove(nn);
        }
        nn++;
        if(nn==n+1){
            nn=1;
        }
        if(map.get(nn)!=null){
            mm++;
        }
        if(mm==m+1){
            mm=1;
        }
    }
    String r=map.values().toString();
    System.out.println("最后一个是:"+r.substring(1, r.length()-1)+"个儿童");
}



不知道你要的是不是这种效果。

这个原来我有代码,但现在找不着了而且那是用C来写的,但是思路还在。这个说一下我的看法:
先创建一个循环链表(节点的个数就是孩子的个数),节点的数据域是孩子的编号。
定义一个变量 i 来计数来数到3,以及另一个变量 size 来记录链表的节点数

以下根据size是否等于1进行循环
当读取了下一个节点的时候 ,i++. 再判断 i 的值是否为3
当i==3的时候,删除读到的节点,并将 i 的值置为0,size=size-1,
当size==1的时候结束循环。
从最后的节点取出数据域内容,就是最后的孩子编号