计算机信息工程学院学生实验报告
专业:_姓名:_ 学号:日期:_
课程名称
|
Java
语言程序设计
|
实验室名称
|
| |
实验名称
|
Java
语言程序设计基础训练
| |||
指导教师
|
|
成绩
|
| |
1、
实验目的
熟悉Java程序结构,掌握基本数据类型的使用方法,熟练运用分支、循环等语句控制程序流程,掌握数组和字符串类型的使用方法。
| ||||
2、
实验原理和内容
求解约瑟夫环问题
约瑟夫环(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[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...
|