题目:
代码如下:
#include<bits/stdc++.h>
using namespace std;
int n=13;
typedef struct student
{
int num;
struct student *next;
};
int main()
{
struct student q[20];//定义链式队列
struct student *head;//定义结构体型指针
head=q;//令指针指向队头
for(int i=0;i<n;i++)//依次为队列扫入 初始序号,下一位地址
{
head->num=i+1;
head->next=&q[i+1];
head=head->next;//指针移动至下一位
}
q[n-1].next=q;//令队列闭合形成环状反复筛选
int count=n;//记录队列总人数
int anum=1;//记录位置
head=q;//从头开始循环
while(count>1)
{
if(!head->num)//若队列数字为零
{
head=head->next;
continue;
}
if(anum==3)//若报数序号为三
{
printf(" %d 号被淘汰\n",head->num);
head->num=0;
count--;
}
head=head->next;
anum++;
if(anum>3)
anum-=3;
}
cout<<"---------------------\n";
while(!head->num)
{
head=head->next;
if(head->num)
{
printf(" %d 号留到最后\n",head->num);
}
}
return 0;
}