您的位置:首页 > 其它

约瑟夫环 猴子选大王的问题

2015-10-29 18:15 501 查看
问题:
有M只猴子围成一圈,按序每只从1到M中的编号,打算从中选出一个大王;经过协商,决定出选大王的规则:从第一个开始循环报数,数到N的猴子出圈,最后剩下来的就是大王。要求:从键盘输入M、N,编程计算哪一个编号的猴子成为大王
代码如下
<pre name="code" class="html">package Joseph.Ring;import java.util.Scanner;public class JosephRing {public static int getSize(boolean monkey[]){int number = 0 ;for(int i = 0 ; i < monkey.length ;i++){if(!monkey[i]) number++;}return number;}public static int gameOverPosition(boolean monkey[]){int posistion = 0;for(int i = 0 ; i < monkey.length ; i++){if(!monkey[i]) {posistion = i;break;}}return posistion;}public static int getNextPosition(boolean monkey[],int now,int N){boolean flag =true;int position = now;int temp =0;if(getSize(monkey)!=1){while(flag){if(position < monkey.length-1){position++;}else{position=0;}if(!monkey[position]){temp++;}if(temp==N){monkey[position] = true;flag = false;}}}return position;}public static void gameStart(boolean monkey[],int N){int position =-1;while(getSize(monkey)!=1){position = getNextPosition(monkey,position,N);}}public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.print("请输入猴子数量 :");int M =scan.nextInt();System.out.print("数的次数 :");int N =scan.nextInt();boolean monkey[] = new boolean[M];gameStart(monkey,N);int position = gameOverPosition(monkey);System.out.println("猴子王是第"+(position+1)+"只");}}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: