约瑟夫环问题c语言数组模拟
时间: 2023-11-12 15:04:13 浏览: 168
约瑟夫环问题是一个经典的问题,它的描述是:有n个人围成一圈,从第一个人开始报数,报到m的人出圈,剩下的人继续从1开始报数,直到剩下最后一个人。这个问题可以用数组模拟来解决。
以下是C语言数组模拟约瑟夫环问题的代码:
```c
#include <stdio.h>
int main()
{
int n, m, i, j, k = 0, a[1000] = {0};
scanf("%d%d", &n, &m);
for (i = 1; i <= n; i++)
a[i] = i;
for (i = 1; i <= n; i++)
{
for (j = 1; j <= m; j++)
{
k++;
if (k > n)
k = 1;
while (a[k] == 0)
{
k++;
if (k > n)
k = 1;
}
}
printf("%d ", a[k]);
a[k] = 0;
}
return 0;
}
```
代码中,首先输入n和m,然后初始化一个长度为n的数组a,将每个元素赋值为它的下标。接着,使用两个循环来模拟报数和出圈的过程。外层循环控制报数的次数,内层循环控制报数的人。在内层循环中,使用变量k来记录当前报数的人的下标,每次报数后,将k加1,如果k超过了数组的长度n,则将k重置为1。如果当前报数的人已经出圈,则继续向后找到下一个没有出圈的人。当报数次数达到m时,输出当前报数的人的下标,并将其标记为已出圈。最后,当所有人都出圈时,程序结束。
阅读全文