C语言 百分网手机站

C语言用数组解决约瑟夫环问题

时间:2020-10-06 09:02:26 C语言 我要投稿

C语言用数组解决约瑟夫环问题

  问题说明:

  在罗马人占领乔塔帕特后,39 个犹太人与约瑟夫及他的朋友躲到一个洞中,大家决定宁愿自杀也不要被敌人抓到,于是确定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而约瑟夫和他的朋友并不想死去,那么他应该怎样安排他和他的朋友的位置,才能逃脱这场死亡游戏呢?

  有N个编号为1~N的`人围成一圈,现在每隔两个人(比如:1、4 之间隔了2、3)就将一个人淘汰出去,问最后剩下的是编号为几的人?

  算法代码如下:

  #include

  #include

  int main(void)

  {

  int people_count = 0;

  int *peoples = NULL;

  printf("please input people number: ");

  scanf("%d", &people_count);

  if (people_count < 2){

  printf("can't do Joseph\n");

  }

  peoples = (int *)calloc(people_count, sizeof(int));

  int i;

  for(i = 0; i < people_count; i++){

  peoples[i] = i+1;

  }

  i = 0;

  int j = 0;

  int rest = people_count;

  while(rest){

  if (i >= people_count){

  i %= people_count;

  }

  if (peoples[i] == 0){

  i++;

  continue;

  }

  if (j++ % 3 ==0 && rest > 1){

  printf("kill people NO. %d\n", peoples[i]);

  peoples[i] = 0;

  rest--;

  }else if (rest==1){

  printf("NO. %d is alive\n", peoples[i]);

  rest--;

  }

  i++;

  }

  system("pause");

  return 0;

  }

【C语言用数组解决约瑟夫环问题】相关文章:

1.C语言的循环链表和约瑟夫环

2.关于c语言约瑟夫问题输出序号算法

3.C语言数组方法

4.C语言数组是什么

5.C语言二维数组

6.C语言数组与指针详解

7.C语言指针数组的概念

8.C语言数组元素的查询

9.C语言数组知识点总结