#include<stdio.h>
#include<stdlib.h>
struct Monkeyking
{
int data;
struct Monkeyking *next;
};
void main()
{
struct Monkeyking *head, *s, *q, *t,*p,*h;
int n, k, count=0, i,j;
printf("输入猴子总数:");
scanf("%d",&k);
printf("\n");
printf("输入报号起始猴子编号:");
scanf("%d",&j);
printf("\n");
printf("输入报号间隔数:");
scanf("%d",&n);
printf("\n");
for(i=0; i<k; i++)
{
s=(struct Monkeyking *)malloc(sizeof(struct Monkeyking)); s->data=i+1;
s->next=NULL;
if(i==0)
{
head=s;
q=head;
}
else
{
q->next=s;
q=q->next;
}
}//建立一个单链表
q->next=head;//将单链表组成环状
printf("输出猴子原始的编号:");
q=head;
while(q->next!=head)
{
printf("%d ",q->data);
q=q->next;
}//依次输出节点的值
printf("%d ",q->data);
printf("\n");
printf("\n");
q=head;
for (i=0;i<j;i++)
{p=q;
q=q->next;
}
q=p;
printf("输出被淘汰的猴子编号:");
if (n==1)
{
for (i=1;i<=k;i++)
{
t=q;
q=q->next;
t->next=h;
h=t;
}
for (i=1;i<=k;i++)
{
printf("%d ",h->data);//倒序输出淘汰猴子的编号,第一个编号为大王h=h->next;
}
printf("\n");
}
else
{
do
{
count++;
if(count==n-1)
{
t=q->next;
q->next=t->next;
t->next=h;
h=t;
count=0;
}
q=q->next;
}
while(q->next!=q);
q->next=h;
h=q;
}
for(i=1;i<=k;i++)
{
printf("%d ",h->data);//倒序输出淘汰猴子的编号,第一个编号为大王h=h->next;
}
}。