#include<iostream>
#include<cstdio>
#include<cmath>
#include<stdlib.h>
#include<malloc.h>
using namespace std;
typedef struct node{
int data;
struct node *next;
}node,*linknode;
node* l;
void intnode(linknode &l,int n){
l = (linknode)malloc(sizeof(node));
l->next = l;
l->data = 1;
linknode p;
for(int i = n;i>1;i--){
p = (linknode)malloc(sizeof(node));
p->next = l->next;
l->next = p;
p->data = i;
}
}
void out(linknode l,int s,int m,int n){
node*p = l;
int i;
for(i = 1;;i++){
if(p->data==s){
break;
}
p = p->next;
}
if(m!=1){
for(int j=1;j<=n;j++){
if(j==1){
for(int k=1;k<m-1;k++){
p = p->next;
}
}
else{
for(int k=1;k<m;k++){
p = p->next;
}
}
cout<<p->next->data<<" ";
p->next=p->next->next;
}
}
else{
for(int j=1;j<=n;j++){
cout<<p->data<<" ";
p=p->next;
}
}
}
int main(){
while(1){
int n,s,m;
cout<<"依次输入n,s,m:";
cin>>n>>s>>m;
if(n<s||n<=0||s<=0||m<=0){
cout<<"请重试"<<endl;
continue;
}
intnode(l,n);
cout<<"输出:";
out(l,s,m,n);
}
return 0;
}
设有n个人围坐在一个圆桌周围,从s个人开始报数,数到第m个人的出列,然后从出列的下一个人重新开始报数,数到第m个人又出列,如此反复知道所有人出列。(用链表加以实现)