13个人围成一圈,从第一个人开始顺序报号 1,2,3。凡报到3者退出圈子。找出最后留在圈子中的人原来的序号。要求用链表实现。
这是上个学期的作业,现在贴上来,可能对最近学c++和数据结构有用。
#include<stdio.h>
#define PEO 13
#define N 3
struct people
{int num;
struct people * next;
};
int main()
{
struct people peo[PEO];
struct people * head, * p;
int i, call, chu;
head = peo;
p = head;
for (i = 0; i < PEO; ++i){
peo[i].num = i + 1;
}
for (i = 0;i < PEO - 1; ++i){
peo[i].next = &peo[i + 1];
}
peo[PEO-1].next = head;
while(chu < 13){
if(p->num != 0){
call++;
if (call == 3){
printf("%d ",p->num);
p->num = 0;
chu++;
call = 0;
}
p = p->next;
}
else{
p = p->next;
}
}
return 0;
}