21xrx.com
2024-12-23 00:19:27 Monday
登录
文章检索 我的文章 写文章
约瑟夫环C语言简单代码
2023-06-15 13:19:09 深夜i     --     --
约瑟夫环 模拟游戏 数组

约瑟夫环是一道经典的算法题,它的思路是:有n个人围成一圈,顺时针给他们标号从1到n。从第一个人开始报数,报到m的人出圈,直到最后一人剩下。现在我们来写一个简单的C语言代码来模拟这个过程。

首先,我们需要定义两个变量n和m,表示有n个人,报到m的人出圈。然后,定义一个数组a来存储n个人的编号。接着,我们用一个for循环将1到n的编号存入数组a中。

然后,我们开始模拟报数的过程。用一个变量i表示当前报数的人,初始值为1。同时,用一个变量j表示已出圈的人数,初始值为0。接着,进入一个while循环,直到只剩下最后一人为止。在while循环中,先判断当前报数的人是否已经出圈,如果出圈了,就跳过该人。否则,将j加1。如果j等于m了,说明该人需要出圈,将该位置上的编号设为0,同时将j重置为0。如果已经报到了最后一个人,就将i重置为1。最后,每次遍历完后,i加1。

最后,我们输出最后剩下的那个人的编号。完整代码如下:


#include

int main()

{

  int n, m;

  printf("请输入人数n和报数m:");

  scanf("%d %d", &n, &m);

  int a[1000];

  int i, j = 0;

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

    a[i] = i + 1;

  }

  i = 0;

  while(j < n - 1) {

    if(a[i] == 0) {

      i = (i + 1) % n;

      continue;

    }

    j++;

    if(j == m) {

      a[i] = 0;

      j = 0;

    }

    i = (i + 1) % n;

  }

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

    if(a[i] != 0) {

      printf("最后一个留下的人编号为:%d", a[i]);

      break;

    }

  }

  return 0;

}

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复