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

需积分: 18 7 下载量 188 浏览量 更新于2024-10-30 收藏 830B TXT 举报
"C++ 编写的猴子选大王的程序" 这是一个使用C++语言实现的“猴子选大王”游戏的代码示例。在猴子选大王游戏中,通常的规则是,有一群猴子围成一个圈,从某个编号的猴子开始数数,数到特定数字的猴子会被淘汰(即“被吃掉”),然后从下一只猴子继续数,直到只剩下一个猴子,这个猴子就是“大王”。在这个程序中,`n`代表猴子的数量,`m`代表每次数到的数字。 代码首先定义了一个结构体`Monkey`,用来存储猴子的信息,包括猴子的编号`num`和指向下一个猴子的指针`next`。结构体定义如下: ```cpp typedef struct monkey { int num; struct monkey* next; } Monkey, *LINK; ``` `LINK`是一个别名,使得我们可以用`LINK`来代替`Monkey*`,使代码更易读。 接着,`main`函数开始执行。它首先分配内存创建猴子链表,`head`和`p2`用于指向链表的第一个和当前节点,`p`则用于遍历链表。代码中的`for`循环创建了`n`个猴子,并将它们连接成一个环形链表。 链表创建完成后,程序打印出原始的猴子序列,以便用户了解初始状态。然后进入游戏的主要逻辑,通过`while`循环模拟数数过程。`i`用于记录数数的次数,`p`指向当前猴子。 在循环中,每次数数后,`i`会增加1,并打印出当前被数到的猴子编号及其对应的位置。如果`i`等于`m`,表示到达淘汰条件,此时需要处理淘汰操作:将`i`重置为0,表示重新开始数数,然后更新链表,让被淘汰的猴子从链表中移除。`if(i==m-1)`的判断是为了记住上一个猴子,因为下一个要被淘汰的是数到`m`的猴子。 最后,当链表中只剩下一个猴子(即`p->next == p`,形成了一个环)时,这个猴子就是大王,程序打印出大王的编号。 这个程序很好地展示了链表数据结构的应用,以及如何用C++实现一个简单的游戏逻辑。同时,它还涉及到指针的操作、循环控制以及链表的修改等核心编程概念。通过这个程序,开发者可以学习到C++中链表操作的基本技巧和游戏逻辑的编程方法。