约瑟夫问题

作者在 2015-12-29 10:20:05 发布以下内容

犹太人有这样的故事:罗马人占领乔塔帕特后,39个犹太人与约瑟夫及他的朋友躲到一个洞里,犹太人决定宁愿死也不要被敌人逮到,于是决定了一个自杀方式,41个人排成一个圈,由第1个人开始报数,每报数到第3个,该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。

现在假设您不幸参与了这个游戏,共有N个人,如何让自己成为最后一个报数者,成功逃生。假设有41个人,您需要排在多少位才能逃生。

代码如下:


#include <stdio.h>
#define N 41       //也可以通过scanf函数赋值

int main()
{
    int j=0,k=0;
	int a[N];             //定义数组,并为每个人生命值赋为1
	for(int i=0;i<41;i++)
	{
		a[i]=1;
	}

	i=0;
    while(k<N-1)          //当自杀人数到N-1时退出
	{
		if(a[i]==1)
		{
			j++;
			if(j%3==0)    //报数为3的人自杀
			{
				a[i]=0;   
				k++;      //统计已经自杀的人数
			}
		}
		i++;
		if(i==N+1)
			i=0;
	}

	for(i=0;i<41;i++)    //找出最后一个人的位置
	{
		if(a[i]==1)
			printf("你应该站在第%d人的位置",i+1);
	}

	return 0;
}


默认分类 | 阅读 2226 次
文章评论,共4条
米粒大小3
2016-01-21 20:17
1
你太厉害了,膜拜啊大神!教教我呗
米粒大小3
2016-01-23 10:42
2
这个是C++还是c#的啊?初学者,跪求指导
米粒大小3
2016-01-23 11:27
3
这个要怎么运行出来啊?
海乃百川(作者)
2016-02-15 22:02
4
这个是用c语言写的,下载一个编译器就能运行。
游客请输入验证码
文章分类