求解约瑟夫环问题
2008-06-26 11:51
218 查看
[align=center]计算机信息工程学院学生实验报告[/align]
专业:_姓名:_ 学号:日期:_
专业:_姓名:_ 学号:日期:_
[align=center]课程名称[/align] | [align=center]Java语言程序设计[/align] | [align=center]实验室名称[/align] | [align=center] [/align] |
[align=center]实验名称[/align] | [align=center]Java语言程序设计基础训练[/align] | ||
[align=center]指导教师[/align] | [align=center]成绩[/align] | [align=center] [/align] | |
1、 实验目的 熟悉Java程序结构,掌握基本数据类型的使用方法,熟练运用分支、循环等语句控制程序流程,掌握数组和字符串类型的使用方法。 | |||
[align=left]2、 实验原理和内容[/align] [align=left]求解约瑟夫环问题[/align] 约瑟夫环(Josephus)问题:古代某法官要判决N个犯人的死刑,他有一条荒唐的法律,将犯人站成一个圆圈,从第S个人开始数起,每数到第D个犯人,就拉来处决,然后再数D个,数到的人再处决……直到剩下的最后一个可赦免。 ![]() | |||
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 ; 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... |
相关文章推荐
- 约瑟夫环问题求解(循环链表法)
- C语言循环链表求解约瑟夫环问题(循环方式)
- 约瑟夫环问题的递推和递归求解
- 使用顺序表求解约瑟夫环问题 (利用java中的ArrayList)
- 关于递推算法求解约瑟夫环问题P(n,m,k,s)
- 约瑟夫环问题的数学求解
- 约瑟夫环出圈问题三种求解方法
- 使用顺序表类SeqList求解约瑟夫环问题
- 使用单链表求解约瑟夫环问题
- 使用顺序表求解约瑟夫环问题
- 约瑟夫环问题求解--程序+详细注解
- 利用循环链队列求解约瑟夫环问题(…
- 关于递推算法求解约瑟夫环问题P(n,m,k,s)
- 约瑟夫环问题求解
- 数据结构实验报告三:教材3.10Josephus(约瑟夫环)问题、多项式乘法问题的求解
- 使用单链表求解约瑟夫环问题 (自定义单链表)
- 使用循环双链表求解约瑟夫环问题
- 约瑟夫环问题求解(Java代码)
- 使用顺序表求解约瑟夫环问题 (自定义顺序表)
- 使用单链表求解约瑟夫环问题 (利用java中的LinkedList)