题目描述
n 个人围成一圈,从第一个人开始报数,数到 m 的人出列,再由下一个人重新从 1 开始报数,数到 m 的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。
输入格式
输入两个整数 n,m。
输出格式
输出一行 n 个整数,按顺序输出每个出圈人的编号。
输入输出样例
输入
10 3
输出
3 6 9 2 7 1 8 5 10 4
说明/提示
1≤𝑚,𝑛≤100
代码如下:
#include<iostream>
using namespace std;
struct node{
int data;
struct node* next;
};
node* head=NULL;
node* tail=head;
node* create_node(int data){
node* p=new node;
p->data=data;
p->next=NULL;
return p;
}
void tail_insert(node* p){
if(head==NULL){
head=p;
tail=p;
p->next=head;
}else{
tail->next=p;
tail=p;
tail->next=head;
}
}
void jian(int& m){
node* p=new node;
for(int i=1;i<=m;i++){
p=create_node(i);
tail_insert(p);
}
}
node* delete_node(node* qian,node* dang){
int data=dang->data;
qian->next=dang->next;
cout<<data<<endl;
return qian->next;
}
int main(){
int m,n;
cin>>m>>n;
jian(m);
node* h=head;
node* t=tail;
while(m--){
for(int i=1;i<n;i++){
t=h;
h=h->next;
}
h=delete_node(t,h);
}
return 0;
}
注:我使用的是单循环链表