求帮我做一个C语言题

来源:百度知道 编辑:UC知道 时间:2024/05/06 17:42:10
题目是:
约瑟夫问题.M个人围成一个圈,从第一个人开始报数,数到N的人出圈,再由下一个人开始报数,数到N的人出圈,输出依次出圈人的编号.M,N值由键盘输入.
例如:M=8,N=5则依次出圈的是5,2,8,7....
提示:可以设置变量j纪录当前报数人的编号(1-m),变量k为已出圈的人数,变量p为当前所报的数(1-n).数组a从下标1-m的各元素对应m个人的位置,相应的元素值为1是表示该人未出圈,为0时表示已出圈!

那位高人帮我解解 我新人 想了好久不会 !

#include <stdio.h>
#include <conio.h>
int main( void )
{
int n, i = 0, m, p;
scanf("%d%d", &n, &m); //n总人数,m步长
while( ++i <= n )
{
p = i * m;
while (p > n)
p = p - n + (p - n - 1)/(m - 1);
printf("%d\n", p);
}
getch();return 0;
}