早教吧 育儿知识 作业答案 考试题库 百科 知识分享

c语言谢大神么么哒~25个人围成一个圈,从第1个人开始顺序报号凡报号为3和3的倍数者退出圈子,找出最后留在圈子中的人原来的序号。要求:用链表实现。报到3或3的倍数的结点删除;提

题目详情
c语言谢大神么么哒~25个人围成一个圈,从第1个人开始顺序报号
凡报号为3和3的倍数者退出圈子,找出最后留在圈子中的人原来的序号。
要求:用链表实现。报到3或3的倍数的结点删除;
提示:(1)需要将链表首尾相接形成环形;
(2)删除时注意头、尾结点的特殊处理;
(3)注意循环结束的条件;
▼优质解答
答案和解析
#include
#include
#include
struct mod
{
int n;
struct mod *next;
};
int num(int count)
{
struct mod *head,*first;
head=first=(struct mod *)malloc(sizeof(struct mod));
for(int i=1;i<25;i++)
{
first->n=i;
first->next=(struct mod *)malloc(sizeof(struct mod));
first=first->next;
}
first->n=i;
first->next=head;
do
{
for (int j=1;j<3;++j)
{
first=head;
head = head->next;
}
first->next=head->next;
free(head);
head = first->next;
}while(first!=head);
i = head->n;
free(head);
return i;
}
void main()
{
int count=25,i;
i=num(count);
printf("剩下的最后一个人的原来的号码是%d",i);
printf("\n");
}