#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int num;//编号
int code;//密码
struct node *next;
}N,*NODE;
void initlist(NODE *L)//初始化
{
*L=(N*)malloc(sizeof(N));
(*L)->next=NULL;
}
void creatlist(NODE L,int n)//建立单循环链表
{
int i=1,x;//i用于编号,x是输入密码
NODE h,p;
scanf("%d",&x);
L->num=i;
L->code=x;
h=L;
for(i=2;i<=n;i++)
{
p=(NODE)malloc(sizeof(N));
scanf("%d",&x);
p->num=i;
p->code=x;
h->next=p;
h=p;
}
h->next=L;//循环
}
void play(NODE L,int m,int n)
{
NODE p,q;
int i=0;
p=L;
while(n)
{
if(n==1)//链表只剩一个结点
{
printf("%d ",p->num);
break;
}
q=(NODE)malloc(sizeof(N));
for(i=1;i<m-1;i++)//找待删除结点前一个
{
p=p->next;
}
if(m==1)//特殊情况,否则会跳过一个
{
q=p;
}
else
{
q=p->next;
}
printf("%d ",q->num);
m=q->code;
p->next=q->next;
p=q->next;
n--;
free(q);
}
}
int main()
{
int n,m;
while(scanf("%d %d",&n,&m)>0)
{
if(m<1)
{
printf("Error!\n");
continue;
}
NODE L;
initlist(&L);
creatlist(L,n);
play(L,m,n);
printf("\n");
}
return 0;
}
C语言课程设计——约瑟夫环
最新推荐文章于 2021-06-19 17:13:39 发布