#include
using namespace std;
int main()
{
int i, k, m, n, num[50], *p;
cin >> n;
p = num;
for (i = 0; i<12; i++)
*(p + i) = i + 1; // 以 1 至 12 为序给每个人编号
i = 0; // i 为每次循环时计数变量
k = 0; // k 为按 1,2,3 报数时的计数变量
m = 0; // m 为退出人数
while (m<12 - 1) // 当退出人数比 12-1 少时(即未退出人数大于 1 时)执行循环体
{
if (*(p + i) != 0)//没退出的人
k++;
if (k == n) // 将退出的人的编号置为 0
{
*(p + i) = 0;
k = 0;
m++;
}
i++;
if (i == 12)
i = 0; // 报数到尾后,i 恢复为 0
}
while (*p == 0)
p++;//这一步我也不太懂,这道题我以前写的
cout << *p << endl;
system("pause");
return 0;
}
这个叫约瑟夫环,用链表或者数组都可以搞定