约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
约瑟夫环经常会在面试中出现,我先用数组解决约瑟夫环问题。上代码:
#include<stdio.h>
#define MAX 10
int main(int argc,char *argv[])
{
int array[MAX] = {0}; //标志位0表示存在,1表示不存在
int i =0;
int counter = 0;
int interval = 4; //m
int total = 0; //统计出列人数
while(total < MAX)
{
if(array[i] == 0)
{
counter++;
if(counter == interval)
{
printf("%8d(out)\n",i+1); //数到m的那个人出列
array[i] = 1; //标志位置1
total++; //出列人数加1
counter = 0; //重新开始报数
}
else
{
printf("%8d",i+1);
}
}
i++;
if(i == MAX) //形成环
{
i = 0;
}
}
return 0;
}

1361

被折叠的 条评论
为什么被折叠?



