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 }
点击+展开代码

相关文章:

  • 2021-07-06
  • 2022-12-23
  • 2022-12-23
  • 2021-08-30
  • 2021-11-20
  • 2022-12-23
猜你喜欢
  • 2021-08-14
  • 2021-12-15
  • 2022-03-06
  • 2022-12-23
  • 2021-08-14
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案