问题:已知n个人(以编号1,2,3,...,n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌只剩下2个人,请问这两个人的编号分别是多少?
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
int n, k, m = 0;
scanf("%d%d%d", &n, &k, &m);
int numble[100] = {0};
for(int i=1;i<=n;i++)
{
numble[i] = i;//
}
for (int j = 0; j < n - 2; j++)//执行n-2次出列
{
int count = 0;//计数器,每次从第k个人开始报m-1个数后出列
while (1)
{
k++;
if (k > n)
k -= n;
if (numble[k] == 0)
continue;
count++;
if (count == m-1)
break;
}
numble[k] = 0;
while (1)
{
k += 1;//第k个人已经出列,往后到第一个还未出列的人
if (k > n)
k -= n;
if (numble[k] != 0)//除去已经出列的人
break;
}
}//实现报数离席
for (int i = 1; i <= n; i++)
{
if (numble[i] != 0)
printf("%d ", numble[i]);
}
return 0;
}