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

来源:学生作业帮助网 编辑:作业帮 时间:2024/08/04 18:39:12
C语言循环链表的题,有N个同学,编号分别为1,2,3……,N,围成一圈,随便选定一个整数m,让大家按顺时针依次报数,报到m的同学便会从圈子中退出,从而被淘汰,直到最后剩下一个人.编写函数实现上
xUOSV*:X'|F==ՖXrǓl 6!C @)L)21ߥ'ɧ|d[rLs:㑵~{}J vbIتOZޑU}~rhrrgdH94n]<J un֌FlPj29 ss.#5EN/̕r{O7_){ # дd\Uf d8idQG+7yVG9EV!Fc6t3M2_Jh,@af uvOQҎ=OAe.۵u/qtC}8cZO%dh6Gv ?+-@PahfΐYO$S"3HJi Lۉ &PM|`T龘M'5ғ]b}v&łF9QX'bbGW=#If(C=e?,H ՈL]h[MP }%B:# HXk6)2cMlkcC^f5)`N  O w7ʃ`:=x/A];P@4q;Ա]< >n:'p(B8^}B&M0~^ (+\L*υz G-bFiHܙĮv_)`:k0'jfE?LM䣉r. M)1)4D"~04Lx^O>d.S P(=Jț8ǵv{0_zEˣԭ9Zyknk Vވ_SFhc̈Ti7-T!2(Ϥ~ӿ }eۋ D*pOGTst[Lm>P.> $:Jge: %sspsw9!.^N\.,/$- rlwGTEqgj/ɂ

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();
}