博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Josephus 问题相关
阅读量:5277 次
发布时间:2019-06-14

本文共 1920 字,大约阅读时间需要 6 分钟。

package com.bupt.syc;import java.util.Iterator;import java.util.LinkedList;import org.junit.Test;public class Josephus {    // 模拟解法    public static int JosephusWinner(int M, int N) throws Exception {        if (N < M) {            throw new Exception("M should smaller than N");        }        int arr[] = new int[N];        for (int i = 0; i < N; i++) {            arr[i] = 1;        }        int cnt = 0, k = 0, j = 0;        int num=-1;        while(cnt<=N-1){            if(arr[k]==1){                j+=arr[k];            }            if(j==M){                arr[k]=0;                cnt++;            }        }        return num;    }    //公式法     //f(1)=0    //f=(f+m)mod i (i>1)    public static int JosephusWinner2(int M ,int N){        int winner=0;        for(int i=2;i<=N;i++){            winner=(winner+M)%i;        }        return winner;    }    public static void JosephusWinner3(int M ,int N){        LinkedList 
linkedList=new LinkedList
(); for(int i=0;i
1){ Iterator iterator=linkedList.iterator(); while(iterator.hasNext()){ num++; iterator.next(); if(num==M){ iterator.remove(); num=0; } } } if(linkedList.size()==1){ System.out.println("winner is :"+linkedList.get(0)); } } //题目:有N个人围成一圈,每人有一个编号,从编号为1的人开始,每隔M个出圈,按出圈次序排成一列,其编号刚好按顺序从1到M。 //要求:从键盘输入M,N,编程计算并输出这N个人原来在圈中的位置。 public static void reverseJosephusWinner(int M,int N){ LinkedList
linkedList=new LinkedList
(); for(int i=0;i
N-1) index=0; else index++; } } public static void main(String args[]) { JosephusWinner3(5,9); reverseJosephusWinner(5,9); }}

转载于:https://www.cnblogs.com/waka401/archive/2012/08/12/2635249.html

你可能感兴趣的文章
线程池的概念
查看>>
Java 序列化
查看>>
Java 时间处理实例
查看>>
Java 多线程编程
查看>>
Java 数组实例
查看>>
mysql启动过程
查看>>
2017前端面试题总结
查看>>
Http GetPost网络请求
查看>>
SWIFT国际资金清算系统
查看>>
Sping注解:注解和含义
查看>>
站立会议第四天
查看>>
如何快速掌握一门技术
查看>>
利用AMPScript获取Uber用户数据的访问权限
查看>>
vagrant 同时设置多个同步目录
查看>>
python接口自动化28-requests-html爬虫框架
查看>>
生成随机数的模板
查看>>
Mysql 数据库操作
查看>>
转:linux终端常用快捷键
查看>>
UVa 11059 最大乘积
查看>>
数组分割问题求两个子数组的和差值的小
查看>>