设编号为 1,2,… n 的 n 个人围坐一圈,约定编号为 k(1<=k<=n)的人从 1 开始报数,数到 m 的那个人出列,它的下一位又从 1 开始报数,数到 m 的那个 人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。
#include<stdio.h>#include<stdlib.h>typedefstructlinklist{int data;structlinklist* next;}LNode;voidsequencesOfdequeue(int n,int k,int m){
LNode* head,*p,*l;
head =(LNode*)malloc(sizeof(LNode));
p = head;
head->next =NULL;
head->data =1;for(int i =0; i < n-1; i++)//创建新结点{
LNode* newnode;
newnode =(LNode*)malloc(sizeof(LNode));
p->next = newnode;
newnode->data = i+2;
newnode->next =NULL;
p = newnode;}
p ->next= head;
p = head;/*for (int i = 0; i < n; i++) //编号
{
p->data = i+1;
p = p->next;
}*/for(int i =0; i < k; i++)//移动到k{
p = p->next;}for(int j =0; j < n; j++)//报数出列{for(int i =0; i < m-1; i++){
l=p;
p = p->next;}printf("%d ",p->data);
l->next = p->next;free(p);
p = l ->next;}}intmain(){int n =10;int k =3;int m =3;sequencesOfdequeue(n,k,m);printf("\n");return0;}