#include<stdio.h>
#include<stdlib.h>
struct node//结点
{
int num;
struct node * next;
};
struct node * creat(int n)//创建链表
{
int i;
struct node *head, *p, *tail;
p = (struct node *)malloc(sizeof(struct node));
p -> num = 1;
p -> next = NULL;
head = p;
tail = p;
for(i = 2; i <= n; i++)
{
p = (struct node *)malloc(sizeof(struct node));
p -> num = i;
tail -> next = p;
p -> next = NULL;
tail = p;
}
tail -> next = head;
return (head);
}
int sel(struct node *head, int m, int n)//按序剔除结点的函数
{
int num;
struct node * p, *q;
q = head;
while(q -> next != head)
{
q = q -> next;
}
while(q -> next != q)
{
p = q -> next;
num++;
if(num % m == 0)
{
q -> next = p -> next;
free(p);
}
else
{
q = p;
}
}
return q -> num;
}
int main()//主函数
{
int n, m;
scanf("%d %d", &n, &m);
struct node * head;
head = creat(n);
printf("%d\n", sel(head, m, n));
return 0;
}
#include<stdlib.h>
struct node//结点
{
int num;
struct node * next;
};
struct node * creat(int n)//创建链表
{
int i;
struct node *head, *p, *tail;
p = (struct node *)malloc(sizeof(struct node));
p -> num = 1;
p -> next = NULL;
head = p;
tail = p;
for(i = 2; i <= n; i++)
{
p = (struct node *)malloc(sizeof(struct node));
p -> num = i;
tail -> next = p;
p -> next = NULL;
tail = p;
}
tail -> next = head;
return (head);
}
int sel(struct node *head, int m, int n)//按序剔除结点的函数
{
int num;
struct node * p, *q;
q = head;
while(q -> next != head)
{
q = q -> next;
}
while(q -> next != q)
{
p = q -> next;
num++;
if(num % m == 0)
{
q -> next = p -> next;
free(p);
}
else
{
q = p;
}
}
return q -> num;
}
int main()//主函数
{
int n, m;
scanf("%d %d", &n, &m);
struct node * head;
head = creat(n);
printf("%d\n", sel(head, m, n));
return 0;
}