约瑟夫游戏的大意:30个游客同乘一条船,因为严重超载,加上风浪大作,危险万分。因此船长告诉乘客,只有将全船29个旅客投入海中,其余人才能幸免于难。无奈,大家只得同意这种办法,并议定30个人围成一圈,由第一个人数起,数到第三个人,便将他投入大海中,如此,循环的进行,直到剩下一个游客为止。
问:哪些位置是将被扔下海的位置?
int main(void)
{
int a[30] = {0};
int *p = a;
int out_n = 0;
int call_n = 0;
while(1) //循环报数
{
if(0 == *p) //如果健在
{
//如果仅剩一人
if(29 == out_n)
{
break;
}
//报数
call_n++;
//最大为3,到了三就从0开始
call_n %= 3;
//
if(0 == call_n)
{
*p = 1;
out_n++;
}
}
p++;
if(p == a+30)
{
p = a; //循环转向下一个人
}
}
printf("最后剩余者的编号为:%d\n", p-a+1);
return 0;
}
来源:CSDN
作者:酷酷的HK
链接:https://blog.csdn.net/qq_42483691/article/details/104629973