一位数组>>>>>>>>>>约瑟夫环

约瑟夫环的故事被改变了很多版本,我的版本是监狱风云:

在一个月高风黑的夜晚,监狱典狱长锤石决定将监狱的33个人处决,但是只留下一个人活下去。他将犯人们围成一个圈,从一号犯人开始,1号报数1,二号报数2,...以此类推,每次报到7的人枪决。 第一次七号犯人死亡,然后8号犯人继续报数1,。。。。以此类推直到最后只剩一个人。而我们有着大智慧的约瑟夫将自己排到了最后活下来的位置,如若想知道位置,则看代码。

include<stdio.h>
#define MAX 33

int main(int argc, const char *argv[])
{
	int i,j,k;
	int sum=0;//用于计算七人
	int p=0;//用于计算存活人数
	int a[MAX]={0};
	for(i=0;i<MAX;i++)
	{
		k=i; 
		if(i==32)
		{
			i=-1;
		}//围成圈

		if(a[k]==1) 
		{
			continue;
		}//死亡跳过

		sum++;
		if(sum%7==0)
		{
			sum = 0;
			a[k]=1;
			printf("%02d号犯人挂了\n",k+1);
		}//计算第七个人 到了7则置0

		for(j=0;j<MAX;j++)
		{
			if(a[j]==0) p++;
		}
		if(p==1) break;//活着的人为1个  跳出大循环 否则 p=0;重新进行下一轮循环计算
		else
			p=0;
	}

	for(i=0;i<MAX;i++)
		if(a[i]==0) printf("%d号犯人成功活下!!!!\n",i+1);
	return 0;
}

如上代码  


将33个犯人视为数组,定义一个int类型含有33个元素的数组。数组里存放犯人的生死状态,生为 0   ,死为1;

如上所示。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值