学校给的约瑟夫问题一般采用链表解法,但是用for循环解法其实也能解决这一问题
本文直接给出此项代码
仅为提供更广泛的解题思路
PS:该解法并不能解决不敢死队问题,因为他不能推出谁在哪个回合死去;
约瑟夫问题
n个人想玩残酷的死亡游戏,游戏规则如下:
n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。
请输出最后一个人的编号。
输入格式:
输入n和m值。 (1<=n<=100 , 1<=m<=100)
输出格式:
输出胜利者的编号。
样例">样例">样例">样例">输入样例:
5 3
输出样例:
4
Hint
第一轮:3被杀
第二轮:1被杀
第三轮:5被杀
第四轮:2被杀
#include <stdio.h>
int main()
{
int n,m,i;
while (scanf("%d %d",&n,&m)!=-1)
{
int p=0;
for (i=2;i<=n;i++)
{
p=(p+m)%i;
}
printf("%d\n",p+1);
}
return 0;
}