#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
int ps;
struct node* next;
} CLinkList;
int main()
{
int n, m;
scanf("%d %d", &n, &m);//输入:人数n和初始数字m
CLinkList* R = (CLinkList*)malloc(sizeof(CLinkList)), * p, * s, * a;
p = R;
s = NULL;
for (int i = 1; i <= n; i++)
{
s = (CLinkList*)malloc(sizeof(CLinkList));
s->data = i;
scanf("%d", &s->ps);
s->next = NULL;
p->next = s;
p = p->next;
}
p->next = R->next;
R = p;
//构造一个循环链表,使其各结点值等于i(i=1,2,3,…,n),此时p指向最后一个结点
for (int i = 1; i <= n; i++)
{
for (int j = 1; j < m; j++)
{
p = p->next;
}
//令p沿循环链表前进m-1个结点
a = p->next;
m = a->ps;
//使m变成新的密码数
s = p->next;
printf("%d", s->data);
p->next = s->next;
free(s);
//删除结点p的下一个结点
}
return 0;//算法结束
}
我只验证里题目里给的数据,不保证其他的不错