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的时候结束循环。
从最后的节点取出数据域内容,就是最后的孩子编号