约瑟夫环 猴子选大王的问题
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)+"只");}}
相关文章推荐
- 51nod 1264 线段相交 (模板)
- 10月28日
- Ubuntu 执行属性为executable (application/x-executable)的文件
- centos 6.5 编译安装了 Nginx1.6.0+MySQL5.6.19+PHP5.5.14
- RxJava 各种操作符(2、3)
- Nodejs
- swift 之单例
- 根据进程号查找路径
- IOS--错误集锦--cell.accessoryType不显示内容
- multithreading--创建Thread线程的第二种方式,Runnable
- java接口(2015年10月29日)
- 向前(上)兼容与向后(下)兼容的区分
- 【基础练习】【DFS】poj1129 Channel Allocation题解
- hdu 4472 Count 动态规划
- Imp数据配置
- spring项目使用hibernate validator 校验请求参数报错 java.lang.NoClassDefFoundError: javax/el/PropertyNotFoundExce
- 58同城网站的一些想法
- java集合框架 arrayblockingqueue应用分析
- 二手房首付问题
- hibernate封装