猴子选大王 java,猴子选大王 java中 linkedlist实现

n只猴子围坐成一个圈,按顺时针方向从1到n编号。然后从1号猴子开始沿顺时针方向从1开始报数,报到m的猴子出局,再从刚出局猴子的下一个位置重新开始报数,如此重复,直至剩下一个猴子,它就是大王。设计并编写程序,实现如下功能:

(1)要求由用户输入开始时的猴子数n、报数的最后一个数m。

(2)给出 当选猴王的 初始 编号。

//思路: 1:  生成一个数组,从 1 到  n;

2: 设置一个计数器 ;  (判断是否应该淘汰  );  初始计数器为 0;

将数组第一个元素拿出,   计数器加一;     判断   计数器的数  是否等于 m ,   如果不等于将其追加到

数组末尾( 此时元素已经从开头移除,),  如果等于m  不作处理(注: 此时元素已经从开头移除,不做处理即为删除

此元素) ,  再去取开头的元素(重复至还剩一个元素 即为大王);

package testtry;

import java.util.*;

public class monkeyking {

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner sc = new Scanner(System.in);

System.out.println("请输入猴子的个数");

int mnum = sc.nextInt();

System.out.println("请输入淘汰的 数");

int onum = sc.nextInt();

//生成一个linedlist对象

LinkedList mlist = new LinkedList();

//add方法为 add(下标,元素);

for(int w=0;w

mlist.add(w, w+1);

}

//执行到这,形成一个数组 [1,2,3,4,5,6,n]; 即猴子的个数

int fnum = 0; //定义一个计数器,纪录报数

/**

当数组 元素的个数 大于 1时,报数,淘汰

(即 当数组元素个数为 1 个时,跳数循环,且此时数组中仅有一个元素)

**/

while(mlist.size() > 1){

//移除开头的元素,并将其值赋给一个对象

Object a = mlist.remove();

fnum++; // 将开头的猴子拿出,计数器加 1

if(fnum < onum ){

//如果猴子 报的数 小于 淘汰数, 将猴子移到末尾,(它还可以报数)

mlist.add(a);

}

if(fnum == onum ){

//如果猴子 报的数 是 淘汰数,

//不将其移到末尾,即为删除, 计数器归零, 同时重新开始报数

fnum = 0;

}

}

System.out.println(mlist); //执行完while循环,此时数组中 只有一个 元素(即为大王);

}

}

你可能感兴趣的:(猴子选大王,java)