题干:
描述
有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 longconst 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 ;}