C语言循环链表的题,有N个同学,编号分别为1,2,3……,N,围成一圈,随便选定一个整数m,让大家按顺时针依次报数,报到m的同学便会从圈子中退出,从而被淘汰,直到最后剩下一个人.编写函数实现上

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/01 06:51:12
C语言循环链表的题,有N个同学,编号分别为1,2,3……,N,围成一圈,随便选定一个整数m,让大家按顺时针依次报数,报到m的同学便会从圈子中退出,从而被淘汰,直到最后剩下一个人.编写函数实现上

C语言循环链表的题,有N个同学,编号分别为1,2,3……,N,围成一圈,随便选定一个整数m,让大家按顺时针依次报数,报到m的同学便会从圈子中退出,从而被淘汰,直到最后剩下一个人.编写函数实现上
C语言循环链表的题,
有N个同学,编号分别为1,2,3……,N,围成一圈,随便选定一个整数m,让大家按顺时针依次报数,报到m的同学便会从圈子中退出,从而被淘汰,直到最后剩下一个人.
编写函数实现上述循环淘汰功能.
编写一个程序测试上述函数的功能,要求用户能够任意输入N与m;程序输出最后剩下人的编号.
代码如下:
#include
#include
#define NULL 0
#define LEN sizeof(struct num)
struct num
{
int x;
struct num *next;
};
struct num *creat(int n);
void check(int *n,int *m);
int elim(struct num *p,int n,int m);
void main()
{
int n,m;
check(&n,&m);
}
void check(int *n,int *m)
{
struct num *p;
int x;
printf("Please input the students' amount:");
scanf("%d",n);
p=creat(*n);
printf("Please input the m:");
scanf("%d",m);
x=elim(p,*n,*m);
printf("The final num is:%d\n",x);
}
struct num *creat(int n)
{
struct num *head;
struct num *p1,*p2;
int i;
p1=p2=(struct num*)malloc(LEN);
head=NULL;
for(i=1;ix=i;
if(i==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(struct num*)malloc(LEN);
}
p2->next=head;
return(head);
}
int elim(struct num *p,int n,int m)
{
struct num *p1,*p2;
p1=p2=p;
int i,j;
for(i=n;i>1;i--)
{
for(j=1;jx==m*j)||(p1->x==(m*j%n)))
{
if(p1==p)
p=p1->next;
else
{
p2=p1;
p1=p1->next;
p2->next=p1->next;
}
}
else
p1=p1->next;
}
}
return(p1->x);
}
编得超烂,勿喷.

C语言循环链表的题,有N个同学,编号分别为1,2,3……,N,围成一圈,随便选定一个整数m,让大家按顺时针依次报数,报到m的同学便会从圈子中退出,从而被淘汰,直到最后剩下一个人.编写函数实现上
这个是以前写的,做成一个环,其N=10,M=3,我就是想改了,lz自己改吧
#include
struct serial
{
int num;
struct serial *next;
};
void main()
{
int i;
struct serial peo[100],*p,*q;
for(i=0;inext =p->next ;
printf("被删除的元素:%-4d\n",p->num);
p=q->next ;
}
printf("\n最后报号出来的是原来的:%d\n",p->num);
getchar();
}