天天看点

约瑟夫环 c++ 循环输入

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&lt;iostream&gt;</code>

<code>#include&lt;string.h&gt;</code>

<code>#include&lt;cstdio&gt;</code>

<code>#include &lt;sstream&gt;</code>

<code>using</code>

<code>namespace</code> <code>std;</code>

<code>template</code>

<code>&lt;</code><code>class</code>

<code>T&gt;</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 -&gt;next = tem;</code>

<code>        </code><code>tem -&gt; next = head;</code>

<code>        </code><code>cur = cur -&gt; next;</code>

<code>        </code><code>pre = pre -&gt; next;</code>

<code>        </code><code>len++;</code>

<code>    </code><code>}</code>

<code>out()</code>

<code>        </code><code>pre -&gt; next = cur -&gt; next;</code>

<code>        </code><code>cout&lt;&lt;cur -&gt; data&lt;&lt;</code><code>" "</code><code>;</code>

<code>        </code><code>delete</code>

<code>cur;</code>

<code>        </code><code>cur = pre -&gt; next;</code>

<code>        </code><code>len--;</code>

<code>nextmove()</code>

<code>        </code><code>cur  = cur -&gt; next;</code>

<code>init()</code>

<code>};</code>

<code>//模板函数:将string类型变量转换为常用的数值类型(此方法具有普遍适用性)</code>

<code>Type&gt;</code>

<code>Type stringToNum(</code><code>const</code>

<code>string&amp; str)</code>

<code>    </code><code>istringstream iss(str);</code>

<code>    </code><code>Type num;</code>

<code>    </code><code>iss &gt;&gt; num;</code>

<code>    </code><code>return</code>

<code>num;</code>

<code>}</code>

<code>joseph&lt;T&gt; :: 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 -&gt; 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&lt;&lt;</code><code>"请输入n个人"</code><code>&lt;&lt;endl;</code>

<code>        </code><code>cout&lt;&lt;</code><code>"请输入密码m"</code><code>&lt;&lt;endl;</code>

<code>        </code><code>while</code><code>(cin&gt;&gt;z,cin&gt;&gt;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&lt;</code><code>int</code><code>&gt; 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 &lt; z.length() ; i++)</code><code>//判断n是不是int型</code>

<code>            </code><code>{</code>

<code>                </code><code>if</code><code>(z[i]&lt;</code><code>‘0‘</code><code>||z[i]&gt;</code><code>‘9‘</code><code>)</code>

<code>                </code><code>{</code>

<code>                    </code><code>cout&lt;&lt;</code><code>"n input error"</code><code>&lt;&lt;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&lt;</code><code>int</code><code>&gt;(z);</code><code>//调用函数把string型的n转换成int型</code>

<code>i = 0 ; i &lt; x.length() ; i++)</code><code>//判断m是不是int型</code>

<code>                </code><code>if</code><code>(x[i]&lt;</code><code>‘0‘</code><code>||x[i]&gt;</code><code>‘9‘</code><code>)</code>

<code>                    </code><code>cout&lt;&lt;</code><code>"m input error"</code><code>&lt;&lt;endl;</code>

<code>                    </code><code>k=1;</code>

<code>            </code><code>m = stringToNum&lt;</code><code>int</code><code>&gt;(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 &lt;= 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 &lt; m ; i++)</code><code>//移动</code>

<code>                    </code><code>dusk.nextmove();</code>

<code>                </code><code>dusk.out();</code>

<code>            </code><code>cout&lt;&lt;endl;</code>

<code>        </code><code>}</code>