题干:
描述
有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入n,m后,输出最后猴王的编号。
输入
每行是用空格分开的两个整数,第一个是 n, 第二个是 m ( 0 < m, n < 300)。
输出
对于每行输入数据,输出数据也是一行,即最后猴王的编号
输入样例 1
6 2
输出样例 1
5
解题报告:
约瑟夫环问题的模板。
AC代码:
#include<cstdio>
#include<queue>
#include<cstring>
#include<cmath>
#include<map>
#include<iostream>
#include<algorithm>
#define ll long long
const ll mod = 1e9+7;
using namespace std;
int n,m;
int f[505];
int main()
{
scanf("%d%d",&n,&m);
f[0] = 1;
for(int i = 1; i<=n; i++) {
f[i] = (f[i-1]+m)%i;
}
printf("%d\n",f[n]+1);
return 0 ;
}