猴子选大王 java中 linkedlist实现

n只猴子围坐成一个圈,按顺时针方向从1到n编号。然后从1号猴子开始沿顺时针方向从1开始报数,报到m的猴子出局,再从刚出局猴子的下一个位置重新开始报数,如此重复,直至剩下一个猴子,它就是大王。设计并编写程序,实现如下功能:
(1) 要求由用户输入开始时的猴子数n、报数的最后一个数m。
(2) 给出 当选猴王的 初始 编号。


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

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

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

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

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






<pre name="code" class="java">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<mnum;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循环,此时数组中 只有一个 元素(即为大王);
 


}


}



                
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页