n只猴子按照身高从低到高顺时针围成一圈,编号为1~n,从编号为1的猴子顺时针从1开始报数,每次报到m的猴子就出圈,下一只猴子继续从1开始报数,如此反复,直到剩下一只猴子,它就是大王
2 ≤ n,m ≤ 100
输入n和m,表示当前有n只猴子和报数出圈的m
输出大王的编号
#include <bits/stdc++.h>
using namespace std;
struct node{
int data;//数据
node *next;//指针
};
int main(){
int n,m;
cin >> n>>m;
node *head,*p,*r;//头节点,游标p,尾结点r
//创建头结点
head =new node;
head -> data=1;
head -> next =NULL;
r=head;
//尾结点
r=head;
for(int i = 2 ; i <= n; i++){
//制作p结点,并赋值
p =new node;
p -> data=i;
p -> next =NULL;
//将p结点连接到链表尾部,并更新尾结点
r -> next =p;
r=p;
}
//围圈,第n只猴子指第1只猴子
r ->next = head;
//指向第1只猴子,开始报数
p = head;
//淘汰n-1只猴子
for(int i = 1 ; i < n; i++){
for(int j = 1 ; j < m-1; j++){
p =p->next;
}
p->next = p->next->next;
p=p->next;
}
cout << p->data;
return 0;
}