一道有趣的编程题,大家都来做一做撒
一道有趣的编程题,大家都来做一做撒将班里的 n 个人围成一圈,顺序编号。从第一个人开始报数(从 1 到 3 报数),凡报到3的人退出圈子,然后从下一个人重新开始,最后留下的那个人就被选为班长。请问按照这个规则,选出的班长是原来编号为第几号的那位.
用链表解决!
#include<stdio.h>
#include<malloc.h>
#define LEN sizeof(struct person)
struct person
{
int num;
struct person *next;
}
main()
{
struct person *head,*p1,*p2;
int i;
head=p1=p2=(struct student *) malloc(LEN);
head->num=1;
for(i=0;i<99;i++)
{
p1=(struct student *) malloc(LEN);
p1->num=i+2;
p2->next=p1;
p2=p1;
}
p1->next=head->next;
head=p2=p1->next;
for(i=0;i<97;i++)
{
p2->next->next=p2->next->next->next;
p2=p2->next->next;
}
printf("%d",p2->next->num);
}