1.背景知识
* 古代判官要判决number个罪犯的死刑,制定了一条荒谬的法律
* 将犯人站成一个圈,从start开始数起,每数到第distance
* 个就处决他,依照此规律直到最后剩下一个人赦免。
* 如当number=5时候,start=0,distance=2时:
* 1.假设五个人是A B C D E
* 2.从A开始每隔两个处决一个人,依次处决
* 3.原始序列A(0) B(1) C(2) D(3) E(4)
* 第一次A(0) C(2) D(3) E(4) 干掉B(1),从c开始
* 第二次A(0) C(2) D(3) E(4) 干掉D(3),从e开始
* 第三次A(0) C(2) E(4) 干掉A(0),从c开始数
* 第四次C(2) E(4) 干掉E(4)
* 第五次C(2) c是被赦免的人
2.解法1:约瑟夫问题线性表存储结构解法
a.建立sequence线性存储结构
1 package com.neusoft.chapter4.exercise; 2 3 public class Sequence { 4 public Object[] listElem; 5 public int currentLen=0;//线性表长度 6 public Sequence(int maxSize) { 7 currentLen =0;//线性表长度置空 8 listElem = new Object[maxSize]; 9 //为顺序表分配存储空间 10 } 11 public void insert(int i, Object x) { 12 if (i<0 || i>currentLen) { 13 System.out.println("第"+i+"个元素不存在"); 14 } 15 if (currentLen==listElem.length) { 16 System.out.println("顺序表容量已满"); 17 } 18 for (int j = currentLen; j >i; j--) { 19 listElem[j]=listElem[j-1]; 20 } 21 listElem[i]=x; 22 currentLen++; 23 } 24 public int length() { 25 return currentLen; 26 } 27 public Object get(int i) { 28 if (i<0 || i>currentLen-1) { 29 System.out.println("第"+i+"个元素不存在"); 30 } 31 return listElem[i]; 32 } 33 public Object remove(int i) { 34 // 将顺序表上的第i个元素a从顺序表中删除 35 Object listRemove=listElem[i]; 36 if (i<0 ||i>=currentLen) { 37 System.out.println("删除位置不合法"); 38 } 39 for (int j = i; j < currentLen-1; j++) { 40 listElem[j]=listElem[j+1]; 41 } 42 currentLen--; 43 return listRemove; 44 } 45 public void display() { 46 for (int i = 0; i < currentLen; i++) { 47 System.out.print(listElem[i]+" "); 48 } 49 System.out.println(); 50 51 } 52 }
可点击下列代码复制
1 package com.neusoft.chapter4.exercise; 2 3 public class Sequence { 4 public Object[] listElem; 5 public int currentLen=0;//线性表长度 6 public Sequence(int maxSize) { 7 currentLen =0;//线性表长度置空 8 listElem = new Object[maxSize]; 9 //为顺序表分配存储空间 10 } 11 public void insert(int i, Object x) { 12 if (i<0 || i>currentLen) { 13 System.out.println("第"+i+"个元素不存在"); 14 } 15 if (currentLen==listElem.length) { 16 System.out.println("顺序表容量已满"); 17 } 18 for (int j = currentLen; j >i; j--) { 19 listElem[j]=listElem[j-1]; 20 } 21 listElem[i]=x; 22 currentLen++; 23 } 24 public int length() { 25 return currentLen; 26 } 27 public Object get(int i) { 28 if (i<0 || i>currentLen-1) { 29 System.out.println("第"+i+"个元素不存在"); 30 } 31 return listElem[i]; 32 } 33 public Object remove(int i) { 34 // 将顺序表上的第i个元素a从顺序表中删除 35 Object listRemove=listElem[i]; 36 if (i<0 ||i>=currentLen) { 37 System.out.println("删除位置不合法"); 38 } 39 for (int j = i; j < currentLen-1; j++) { 40 listElem[j]=listElem[j+1]; 41 } 42 currentLen--; 43 return listRemove; 44 } 45 public void display() { 46 for (int i = 0; i < currentLen; i++) { 47 System.out.print(listElem[i]+" "); 48 } 49 System.out.println(); 50 51 } 52 }