21xrx.com
2025-07-09 18:57:16 Wednesday
登录
文章检索 我的文章 写文章
约瑟夫环C语言简单代码
2023-06-15 13:19:09 深夜i     22     0
约瑟夫环 模拟游戏 数组

约瑟夫环是一道经典的算法题,它的思路是:有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;
}

  
  

评论区

    相似文章