设计一个完整的C程序

来源:百度知道 编辑:UC知道 时间:2024/05/21 11:29:34
10个人围成一圈,从第一个人开始依次从1到8循环报数,每当报数为8时,此人出圈,直到圈中只剩下一个人为止,请按退出的次序输出出圈人原来的编号。
希望有详解

#include<stdio.h>
#include<stdlib.h>

typedef struct _person
{
int num;
struct _person *next;
} person;

person* init(int n)
{
person *h,*p,*tail;
int i;

h=(person*)malloc(sizeof(person));
h->num=1;
h->next=h;
tail=h;
for(i=1;i<n;i++)
{
p=(person*)malloc(sizeof(person));
p->num=i+1;
p->next=tail->next;
tail->next=p;
tail=p;

}
return h;
}

int deal(person *h)
{
person *p,*q;
int n,m;
printf("输入m:\n");
scanf("%d",&m);

for(n=1,p=q=h;p->next!=p;q=p,p=p->next,n++)
if(n%m==0)
{
q->next=p->next;
printf("出列的猴子:\n");
printf("%d\n ",p->num);
free(p);
p=q->next;
n=1;
}
n=p->num;
free(p);
return n;
}