せいしゅん404 • 4年前
#include<cstdio>
#include<iostream>
using namespace std;
struct node{
int num;
node *next;
};
int main(void){
int n,k,m=0;
node *p,*q,*head;
cin>>n>>k;
head=new node;//给head分配内存地址并指向这个新的内存地址
head->next=NULL;
head->num=1;
q=head;//生成头结点
for(int i=2;i<=n;i++){
p=new node;//生成新节点
p->next=NULL;
p->num=i;
q->next=p;//前一个节点与当前节点产生关系
q=p;//前一个节点的指针指向当前节点
}
q->next=head;//最后一个节点指向头节点,产生单向链表关系。
p=head;
//当下一个地址等于自己则是最后一只猴子
while(p->next!=p){
m++;//报数
if(m==k){
//相等则输出
cout<<p->num<<" ";
//出圈,重新产生新的链接
q->next=p->next;
p=p->next;
m=0;//重新开始报数
}else{
q=p;
p=p->next;
}
}
cout<<p->num<<endl;//一定不要忘记输出最后一只猴子。
return 0;
}
评论:
请先登录,才能进行评论