约瑟夫问题 C++ 代码详解:逢三出局游戏
这段代码是一个经典的约瑟夫问题的解法,其中定义了一个结构体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<
return 0; }
原文地址: https://www.cveoy.top/t/topic/nxUj 著作权归作者所有。请勿转载和采集!