方法1:数组(不能AC)
#include <bits/stdc++.h>
using namespace std;
const int maxn=1000005;
int a[maxn];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n,m;
int cnt=0,i=0,k=0;
scanf("%d%d",&n,&m);
while(cnt!=n-1)
{
i++;
if(i>n) i=1;//重新数数
if(a[i]==0)
{
k++;
if(k==m)
{
a[i]=1;
cnt++;
k=0;
}
}
}
for(int i=1;i<=n;i++)
{
if(a[i]==0)
{
printf("%d",i);
break;
}
}
return 0;
}
可以看到,只过了三个样例,并且还有一个是勉强过的
所以,我们并不能用模拟法一步一步模拟
方法2:递归公式
int f(int n, int m){
return n == 1 ? n : (f(n - 1, m) + m - 1) % n + 1;
}