C语言使用数组和循环解决约瑟夫环问题
约瑟夫入狱,监狱内共有 33 个犯人。某日 33 名犯人围成一圈,从第一个犯人开始报数,报到数字 7 的犯人出列,
被枪毙,下一名犯人重新从 1 开始报数。依次类推,直至剩下最后 1 名犯人可被赦免。聪明的约瑟夫在心里稍加计算,
算出了最后枪毙的位置,他站在这个位置,最终避免了自己被枪毙,逃出升天。
问:约瑟夫算出的是哪个位置?
#include<stdio.h>
#define MAX 33
#define DEATH 7
int main()
{
int i=0,flag=0,sum=MAX,a[MAX]={0},tmp=1;
for(i=0;i<MAX;i++)a[i]=1;
while(sum>1)
{
for(i=0;i<MAX;i++)
if(a[i])
{
flag++;
if(flag==DEATH)
{
a[i]=0;
flag=0;
sum--;
printf("第%d轮%d枪毙\n",tmp++,i+1);
printf("sum=%d\n",sum);
}
}
}
for(i=0;i<MAX;i++)if(a[i])printf("幸存者编号是%d\n",i+1);
return 0;
}