约瑟夫问题是个著名的问题:

有N个海盗练习生来到宝藏岛,岛上的宝藏导师龙让他们围成一圈,第一个人从1开始报数,报M(龙不喜欢听到M)的将被龙吃掉,下一个人接着从1开始报。(N是小于100的,如果太多了,龙就会被乱杀)。

如此反复,最后剩下一个,可以获得海盗的宝藏。

输入两个数​​n m​​第一个是海盗数,第二个是龙不喜欢的数

输出​​"活下来的人是%d号\n"​

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
int main()
{
int n = 0;//来到岛上的海盗
int m = 0;//龙不喜欢的数
int arr[100] = { 0 };//0是还活着,1是被龙吃了
scanf("%d %d", &n, &m);
int i = 0;//报数器
int j = 0;//海盗编号
int h = 0;//h是被龙吃掉的人数,当h
do
{
j++;//海盗号增加
if (arr[j] != 1)//如果海盗还活着
{
i++;//就报数
if (i == m)//在报的为m的时候
{
arr[j] = 1;//海盗就被吃了
h++;//吃掉的人数加1
i = 0;//报数清0
}
}
if (j == n)//每次检查一下,如果是第n个人了
{
j = 0;//就归0
}
} while (h < n);
printf("活下来的人是%d号\n", j);
return 0;
}

海盗练习生们,祝你们好运