描述
有n只猴子围成一圈,每个有一个编号,编号从1到n。打算从中选出一个大王。经过协商,决定选大王的规则如下:从第一只开始,每隔m只,数到的猴子出圈,最后剩下来的就是大王。
输入
输入为一行两个数,即n,m。
输出
输出最后剩下来的猴子序号。
输入样例
8 4
输出样例
6
循环链表是指最后一个空间指向头节点的链表类型,可以用于需要在多个数据之间来回循环的题目,比如约瑟夫问题(上面这道就是约瑟夫问题的改版)。普通约瑟夫问题可以用数组做,如上面这道题,用数组做就是这样:
#include<iostream>
using namespace std;
bool b[10000];
int main()
{
int js=0,djs=0,i,n,m;
cin>>n>>m;
for(i=1;i<=n;i++)b[i]=true;
i=1;
while(djs<n-1)
{
if(i>n)i=1;//判断是否越界
if(b[i])js++;//判断这个点有没有出圈
if(js==m)//判断是否数到m
{
js=0;
b[i]=false;
djs++;
}
i+&