帮我解一道C语言的题.

来源:百度知道 编辑:UC知道 时间:2024/05/27 04:51:32
有n个人围成一个圈,顺序排号.从第一个人开始从一到三报数,凡是报到三的人退出圈子,问最后留下的是原来第几号的那个人.本人是C语言的初学者,菜鸟一个,敬请各位高手师傅们帮忙.不胜感激涕零.

约瑟夫问题。下面给出源码,输入n和报的数m,打印出出圈的顺序和最后一个的编号。

a数组存放n个人的编号,从1到n。
b数组存放出圈人的顺序和编号。
josephu函数是约瑟夫算法。

#include <stdio.h>

void josephu(int a[], int b[], int n, int m)
{
int i = 0, j = 0, k = 0, l = 0;
for (i=1; i<=n; i++) {
if (a[i] > 0) {
j = j+1;
if (j == m) {
j = 0;
b[l++] = a[i];

a[i] = 0;

k++;
}

if (k == n) {
break;
}
}

if (i == n) {
i = 0;
}
}
}

int main()
{
int a[128] = {0};
int b[128]