#include <iostream>#include <cstdio>#include <cstring>usingnamespacestd;
int n,m,k;
int main()
{
while (scanf("%d%d",&n,&m))//编号0,1,2,3,.....,n-1
{
int s=0;//只有一个人时最后出圈的人编号为0 for (int i=2;i<=n;i++)
s=(s+m)%i;
printf("%d\n",s);//编号为s的最后出圈
}
return0;
}
如果需要打印出圈循序代码如下
#include <iostream>#include <cstdio>#include <cstring>usingnamespacestd;
int n, m, k, p, num, step;
int arr[20];
int main()
{
scanf("%d%d", &n, &m);//人数 步数 for (int i = 1; i <= n; i++)
{
arr[i] = i;
}
p = n;//从位置n开始数m个位置不包括位置n
num = n;//人数num
step = m;//步数stepwhile (num)
{
while (step--)
{
do {
p = (p + n) %n + 1;
} while (arr[p] == 0);//走到下个未出圈的位置
}
printf("%d ", p);
step = m;
num--;
arr[p] = 0;//出圈
}
system("pause");
return0;
}