C++实现猴子选大王算法

需积分: 10 1 下载量 12 浏览量 更新于2024-09-15 收藏 2KB TXT 举报
"猴子选大王 - C++实现的小程序代码" 在这个C++小程序中,我们看到的是一个模拟“猴子选大王”的过程。这个过程通常指的是猴子排成一个圈,每次从某个点开始数到一定数量后,数到的那个猴子就被淘汰,直到只剩下最后一只猴子成为大王。此代码实现了一个简单的链表结构来表示猴子们,并提供了添加猴子、遍历链表以及进行选大王的过程。 首先,我们定义了一个名为`monkeyNod`的结构体,用于存储猴子的数据(`data`)和指向下一个猴子的指针(`next`和`forword`)。`forword`指针在这里用于形成链表的环形结构,即最后一个猴子指向第一个猴子。 接着,我们创建了一个名为`Monkey`的类,它包含三个方法:构造函数、`traverse`和`count`。 - 构造函数`Monkey(int n)`接收一个整数`n`作为参数,表示猴子的数量。它创建一个链表,链表中的每个节点代表一只猴子,数据值从1到n。构造函数首先创建首节点,然后通过循环创建剩余的节点,并将它们连接成一个环形链表。最后,输出“Ⱥ”表示链表已构建完成。 - `traverse()`方法用于遍历链表并打印所有猴子的数据。它从当前链表的头节点开始,逐个输出节点的数据,直到再次回到头节点为止。 - `count(int n)`方法模拟选大王的过程。如果传入的数字`n`大于链表中的猴子数量,它会输出错误信息“˴n!”(意为“猴子不够”)。否则,它会进行选大王的游戏。这个过程使用了两个计数器`i`和`j`,它们初始化为`n`,并遍历链表,每数到`n`次,就将`i`和`j`减一,同时移动指针`pTmp`到下一个节点。当`i`变为0时,`pTmp`指向的猴子被“淘汰”,即从链表中移除。重复这个过程,直到`j`变为0,此时`pTmp`指向的就是最后的大王。 在代码的最后部分,`count`方法中的循环和条件语句用于实现这一逻辑。每次迭代,`pTmp`都向后移动,直到`i`变为0,此时`pTmp`指向的猴子的`forword`指针被设置为`NULL`,表示该猴子已被淘汰。然后更新`i`和`j`,继续下一轮计数。当`j`为0时,`pTmp`指向的就是最后剩下的猴子,即大王。 这段代码提供了一个简单的C++实现,通过链表和循环来模拟猴子选大王的逻辑,可以作为理解和学习C++链表操作的一个实例。