#include<stdio.h>
#include<stdlib.h>
typedef struct link
{
int data;
struct link *next;
}node;
node* Cre(int n)
{
node *head = NULL;
node *p = NULL;
for(int i=1; i<=n; i++)
{
node *temp = (node*)malloc(sizeof(node));
temp->data = i;
if(head == NULL)
{
head = temp;
}
else
{
p->next = temp;
}
p = temp;
}
p->next = head;
return p;
}
void yu(int n, node *t, int m, int *a)
{
int count = 0,i = 0;
node *p = t, *q = t->next;
while(i != n-1)
{
count += 1;
if(count == m)
{
*a = q->data;
a++;
p->next = q->next;
free(q);
q = p->next;
count = 0;
i+=1;
}
else
{
p = q;
q = q->next;
}
}
*a = p->data;
free(q);
}
int main()
{
int n,m;
scanf("%d %d",&n,&m);
node *tail = Cre(n);
int a[n];
yu(n,tail,m,a);
for(int i=0; i<n; i++)
{
printf("%d",a[i]);
if(i != n-1)printf(" ");
}
return 0;
}
约瑟夫问题
最新推荐文章于 2025-05-16 14:00:49 发布