AC

せいしゅん404  •  3年前


#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; 
}


评论:

请先登录,才能进行评论