求解约瑟夫环问题
来源:互联网 发布:php文件上传下载源码 编辑:程序博客网 时间:2024/04/28 09:15
计算机信息工程学院学生实验报告
专业:_姓名:_ 学号:日期:_
课程名称
Java语言程序设计
实验室名称
实验名称
Java语言程序设计基础训练
指导教师
成绩
1、 实验目的
熟悉Java程序结构,掌握基本数据类型的使用方法,熟练运用分支、循环等语句控制程序流程,掌握数组和字符串类型的使用方法。
2、 实验原理和内容
求解约瑟夫环问题
约瑟夫环(Josephus)问题:古代某法官要判决N个犯人的死刑,他有一条荒唐的法律,将犯人站成一个圆圈,从第S个人开始数起,每数到第D个犯人,就拉来处决,然后再数D个,数到的人再处决……直到剩下的最后一个可赦免。
当N=5,S=1,D=2时,约瑟夫环问题执行过程如下图所示。
3、 实验步骤
public class testJosephus{
public static void main(String args[]){
Josephus a = new Josephus(5);
a.print();
System.out.println("Liver is Number "+a.kill(1,2));
}
}
class Josephus{
int ring[];
public Josephus(int n){
ring = new int[n];
for (int i = 0;i<n;i++){
ring[i] = i+1;
}
}
public int kill(int s,int d){
int n = ring.length;
int k = 0;
int judge = s-1;
int killer = 0;
while (n>1){
if (ring[judge] != 0){
k++;
}
if (k==d){
ring[judge] = 0;
k = 0;
n--;
}
if (judge == ring.length-1){
judge =-1 ;
}
judge++;
}
for (int i=0;i<ring.length;i++){
if (ring[i] != 0){
killer = i+1;
}
}
return killer;
}
public void print(){
for (int i=0;i<ring.length;i++){
System.out.print(ring[i]+" ");
}
System.out.println();
}
}
4、 程序及运行结果(或实验数据记录及分析)
运行结果为:
1 2 3 4 5
Liver is Number 3
Press any key to continue...
当N=10,S=2,D=3时,运行结果为:
1 2 3 4 5 6 7 8 9 10
Liver is Number 5
Press any key to continue...
- 求解约瑟夫环问题
- 约瑟夫环问题求解
- 使用顺序表求解约瑟夫环问题
- 2种方法求解约瑟夫环问题
- 三种方法求解约瑟夫环问题
- 使用单链表求解约瑟夫环问题
- 使用循环双链表求解约瑟夫环问题
- 约瑟夫环问题求解--程序+详细注解
- 约瑟夫环问题求解(Java代码)
- 约瑟夫环问题的数学求解
- 约瑟夫问题求解(C++)
- 约瑟夫问题的求解
- 约瑟夫问题求解
- 约瑟夫问题求解
- 约瑟夫问题求解
- 约瑟夫问题求解
- 约瑟夫问题java求解
- 约瑟夫问题C++求解
- SOA架构实践首先从企业级IT架构设计着手
- 字符串转换 加密(拷)
- 域名解析 A记录 MX记录 CNAME记录 TTL
- 将Exce导入到winfrom中
- .NET开发规范
- 求解约瑟夫环问题
- 管理软件全面进入平台时代
- c#匯出excel
- 何时采用SOA,何时不采用SOA
- C#笔试的一些题目(收集)
- 不再怨天忧人了
- javascript:void(0)
- 悟透JavaScript
- 图片验证码