作业帮 > 综合 > 作业

C语言循环链表的题,有N个同学,编号分别为1,2,3……,N,围成一圈,随便选定一个整数m,让大家按顺时针依次报数,报到

来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/04/28 13:02:45
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,让大家按顺时针依次报数,报到
这个是以前写的,做成一个环,其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();
}
C语言循环链表的题,有N个同学,编号分别为1,2,3……,N,围成一圈,随便选定一个整数m,让大家按顺时针依次报数,报到 C语言:有n个人围成一圈,按顺序从1到n编号.从第一个人开始报数,报数3的人退出圈子 C语言 有n个人围成一圈,按顺序从1到n编号.从第一个人开始报数,报数3的人退出圈子 一道有关C语言的问题题目:1. m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次 存到数组p中,包 用C语言编写:有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,请输出报数出列圈及最 C语言指针 有n个人围城一圈,顺序排号.从第一个人开始报数(从1报到3),凡报到3的人 (Java 语言)有 n 个孩子站成一圈,从第一个孩子开始顺时针方向报数,报到 3 的人出列,下一个人继续从 1 C语言:有n人围成一圈,顺序排号.从第1个人开始报数(从1到3报数),凡报到3的人退出圈子, c语言:有n个人围成一圈,顺序排号.从第一个人开始报数(从1~3报数),报到3的人退出圈子,求退出顺序 有N个人围成一个圈顺序编号,从第一个人开始报数(从1到M),凡报到M的人退出圈子, 2:有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出圈子, c语言:有n个人围成一圈,按顺序编号.从第1个人开始报数,数到m时该人退出,并且下一个从1重新开始报数.