这段代码是一个经典的约瑟夫问题的解法,其中定义了一个结构体people,表示每个人的信息,包括姓名和下一个人的指针。接着通过定义11个people类型的结构体变量,分别代表11个人,按照顺序连接起来形成一个环形链表。然后通过一个while循环模拟游戏的过程,每隔三个人就将当前人出局,直到最后只剩下一个人时结束游戏。

值得注意的是,在出局时需要用到两个指针p和pre,分别指向当前出局的人和他的前一个人,以便在链表中删除当前人。同时还需要一个计数器count来记录当前已经数了几个人,以便判断是否达到了每隔三个人出局的条件。最后需要一个变量outNum来记录已经出局的人数,以便在只剩下一个人时结束游戏。

#include <bits/stdc++.h> using namespace std; /* 赵,钱,孙,李,周,吴,郑,王,刘,关,张 逢三出局 孙, 吴,刘,赵,周,关,李, 张,王,钱,郑, */ struct people { string name; struct people *next; };

int main() { struct people p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11; p1.name='赵'; p1.next=&p2; p2.name='钱'; p2.next=&p3; p3.name='孙'; p3.next=&p4; p4.name='李'; p4.next=&p5; p5.name='周'; p5.next=&p6; p6.name='吴'; p6.next=&p7; p7.name='郑'; p7.next=&p8; p8.name='王'; p8.next=&p9; p9.name='刘'; p9.next=&p10; p10.name='关'; p10.next=&p11; p11.name='张'; p11.next=&p1; struct people *p=&p1,*pre=&p11; int outNum=0,count=0; while(outNum<11) { count++; if(count==3) { cout<name<<','; pre->next=p->next; p->next=NULL; p=pre->next; count=0; outNum++; } else { p=p->next; pre=pre->next; } }

return 0; }

约瑟夫问题 C++ 代码详解:逢三出局游戏

原文地址: https://www.cveoy.top/t/topic/nxUj 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录