1.用常规的数组
#include<iostream>
using namespace std;
#define maxsize 50
void yuesefu(int x,int k){
int i;
int j=1;
int sum=0;
int t=1;
int a[maxsize];
for(i=1;i<=x;i++)
a[i]=i;
while(sum!=x){
if(a[t]==-1){
t++;
continue;
}
if(t>x){
t=1;
continue;
}
if(j==k){
cout<<a[t]<<" ";
a[t]=-1;
j=0;
sum++;
}
j++;
t++;
}
}
void main(){
yuesefu(6,4);
}
2.用循环链表
#include<iostream>
using namespace std;
typedef struct CNode{
int data;
struct CNode *next;
}CNode,*CList;
void print(CList L,int x){
int i=0;
CNode *p;
p=L;
while(i!=x){
cout<<p->data<<" ";
i++;
p=p->next;
}
}
void inputAuto(CList &L,int x){
int i;
CNode *s,*r;
L=(CNode *)malloc(sizeof(CNode));
L->data=1;
L->next=L;
r=L;
for(i=2;i<=x;i++){
s=(CNode *)malloc(sizeof(CNode));
s->data=i;
s->next=r->next;
r->next=s;
r=s;
}
}
void inputByhand(CList &L,int x){
L=(CNode *)malloc(sizeof(CNode));
cin>>L->data;
L->next=L;
int i;
CNode *s,*r;
int y;
r=L;
for(i=2;i<=x;i++){
cin>>y;
s=(CNode *)malloc(sizeof(CNode));
s->data=y;
s->next=r->next;
r->next=s;
r=s;
}
}
void Kill(CList &L,int x,int k){
CNode *q,*p,*s;
q=L;
p=L;
int j=1;
while(j<x)
{
p=p->next;
j++;
}
int i=1;
int killsum=0;
while(killsum!=x){
if(i==k){
cout<<q->data<<" ";
p->next=q->next;
q=q->next;
i=1;
killsum++;
}
if(k!=1){
p=q;
q=q->next;
i++;
}
}
}
void main(){
CList L;
int x;
int k;
int choose;
cout<<"选择编号输入方式:\n1.手动输入\n2.自动输入"<<endl;
cin>>choose;
cout<<"输入人数"<<endl;
cin>>x;
if(choose==1){
cout<<"输入编号"<<endl;
inputByhand(L,x);
}
if(choose==2){
inputAuto(L,x);
print(L,x);
}
cout<<"\n输入倒数数"<<endl;
cin>>k;
cout<<endl;
Kill(L,x,k);
}