1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<code>#include<iostream></code>
<code>#include<string.h></code>
<code>#include<cstdio></code>
<code>#include <sstream></code>
<code>using</code>
<code>namespace</code> <code>std;</code>
<code>template</code>
<code><</code><code>class</code>
<code>T></code>
<code>class</code>
<code>joseph</code>
<code>{</code>
<code> </code><code>struct</code>
<code>node</code>
<code> </code><code>{</code>
<code> </code><code>T data;</code>
<code> </code><code>node * next;</code>
<code> </code><code>node():next(NULL) {}</code>
<code> </code><code>node(T d):data(d),next(NULL) {}</code>
<code> </code><code>};</code>
<code>private</code><code>:</code>
<code> </code><code>node * head;</code>
<code> </code><code>node * cur;</code>
<code> </code><code>node * pre;</code>
<code>public</code><code>:</code>
<code> </code><code>joseph(T d);</code>
<code> </code><code>int</code>
<code>len = 0;</code>
<code> </code><code>void</code>
<code>setValue(T d)</code>
<code> </code><code>node * tem =</code><code>new</code>
<code>node(d);</code>
<code> </code><code>cur ->next = tem;</code>
<code> </code><code>tem -> next = head;</code>
<code> </code><code>cur = cur -> next;</code>
<code> </code><code>pre = pre -> next;</code>
<code> </code><code>len++;</code>
<code> </code><code>}</code>
<code>out()</code>
<code> </code><code>pre -> next = cur -> next;</code>
<code> </code><code>cout<<cur -> data<<</code><code>" "</code><code>;</code>
<code> </code><code>delete</code>
<code>cur;</code>
<code> </code><code>cur = pre -> next;</code>
<code> </code><code>len--;</code>
<code>nextmove()</code>
<code> </code><code>cur = cur -> next;</code>
<code>init()</code>
<code>};</code>
<code>//模闆函數:将string類型變量轉換為常用的數值類型(此方法具有普遍适用性)</code>
<code>Type></code>
<code>Type stringToNum(</code><code>const</code>
<code>string& str)</code>
<code> </code><code>istringstream iss(str);</code>
<code> </code><code>Type num;</code>
<code> </code><code>iss >> num;</code>
<code> </code><code>return</code>
<code>num;</code>
<code>}</code>
<code>joseph<T> :: joseph(T d)</code>
<code> </code><code>head =</code><code>new</code>
<code> </code><code>node * fz =</code><code>new</code>
<code>node();</code>
<code> </code><code>cur = head;</code>
<code> </code><code>pre = fz;</code>
<code> </code><code>pre -> next = head;</code>
<code>int</code>
<code>main()</code>
<code> </code><code>while</code><code>(1)</code><code>//總的循環</code>
<code> </code><code>string z,x;</code>
<code> </code><code>cout<<</code><code>"請輸入n個人"</code><code><<endl;</code>
<code> </code><code>cout<<</code><code>"請輸入密碼m"</code><code><<endl;</code>
<code> </code><code>while</code><code>(cin>>z,cin>>x)</code>
<code> </code><code>{</code>
<code> </code><code>int</code>
<code>a = 1 ;</code><code>//為第一個節點指派而建立的</code>
<code>j = 0 ;</code><code>//j為n的輸入判斷因子,當j=1時說明輸入的n不是int型</code>
<code>k = 0 ;</code><code>//k為m的輸入判斷因子,當j=1時說明輸入的n不是int型</code>
<code> </code><code>joseph<</code><code>int</code><code>> dusk(a);</code><code>//建立第一個節點,并調用構造函數把第一個節點指派為1</code>
<code> </code><code>dusk.len++;</code><code>//連結清單長度加一</code>
<code>n , m ;</code><code>//n為人數,m為密碼</code>
<code> </code><code>for</code><code>(</code><code>int</code>
<code>i = 0 ; i < z.length() ; i++)</code><code>//判斷n是不是int型</code>
<code> </code><code>{</code>
<code> </code><code>if</code><code>(z[i]<</code><code>‘0‘</code><code>||z[i]></code><code>‘9‘</code><code>)</code>
<code> </code><code>{</code>
<code> </code><code>cout<<</code><code>"n input error"</code><code><<endl;</code>
<code> </code><code>j = 1;</code>
<code> </code><code>break</code><code>;</code>
<code> </code><code>}</code>
<code> </code><code>}</code>
<code> </code><code>n = stringToNum<</code><code>int</code><code>>(z);</code><code>//調用函數把string型的n轉換成int型</code>
<code>i = 0 ; i < x.length() ; i++)</code><code>//判斷m是不是int型</code>
<code> </code><code>if</code><code>(x[i]<</code><code>‘0‘</code><code>||x[i]></code><code>‘9‘</code><code>)</code>
<code> </code><code>cout<<</code><code>"m input error"</code><code><<endl;</code>
<code> </code><code>k=1;</code>
<code> </code><code>m = stringToNum<</code><code>int</code><code>>(x);</code><code>//調用函數把string型的m轉換成int型</code>
<code> </code><code>if</code><code>(k==1||j==1)</code><code>break</code><code>;</code><code>//判斷因子有一個等于1說明:n,m有一個輸入的不是int型,結束循環</code>
<code>i = 2 ; i <= n ; i++)</code><code>//初始化指派</code>
<code> </code><code>dusk.setValue(i);</code>
<code> </code><code>dusk.init();</code><code>//把cur指針指向head,把pre的next指向cur</code>
<code> </code><code>while</code><code>(dusk.len!=0)</code><code>//長度不為0時循環</code>
<code> </code><code>for</code><code>(</code><code>int</code>
<code>i = 1 ; i < m ; i++)</code><code>//移動</code>
<code> </code><code>dusk.nextmove();</code>
<code> </code><code>dusk.out();</code>
<code> </code><code>cout<<endl;</code>
<code> </code><code>}</code>