用编程语言答,最好是C

来源:百度知道 编辑:UC知道 时间:2024/05/09 20:44:42
联欢会上,M个人围坐一圈,每人准备了一个节目。表演的顺序采用一种游戏的方法产生:从圈内选出1人记为1号,按顺时针方向每人的号数依次记为2号、3号…M号。由1号随机抽出一个号N(1<=N<=M),然后从1号开始顺时针方向1、2、3…顺序报数,每报到N时,这个人就出来表演节目,表演结束后,再从1开始继续向下报数,报到N的人就出来表演。凡是表演过的人,下一次报数时就跳过去,这样继续下去,直到M个人都表演完节目。请你编一个程序,用算法模拟这个过程,要求打印出表演节目人的顺序号。
我知道与约瑟夫问题类似,但我需要的是已经改好的程序.直接对应题目的代码.

我在VC下调的,如果你在其它编译器下调试有什么问题,给我发消息。
#include "stdio.h"

struct game
{
int ID;
game *pNext;
};

void main()
{
int i,m,n;
game *pPrev,*pNode,*pTop;
printf("Input M N:");
scanf("%d %d",&m,&n);
if(n>m||n<1) return;
pTop=new game;
pTop->ID=1;
pPrev=pTop;
for(i=2;i<=m;i++)
{
pNode=new game;
pNode->ID=i;
pPrev->pNext=pNode;
pPrev=pNode;
}
pNode->pNext=pTop;
pPrev=pNode;
pNode=pTop;
i=1;
while(pNode->pNext!=pNode)
{
if(i%n==0)
{
printf("%d ",pNode->ID);
pPrev->pNext=pNode->pNext;
delete pNode;
pNode=pPrev->pNext;
i=1;
}
pPrev=pNode;
pNode=pNode->pNext;
i++;
}
delete pNode;
}

约瑟夫环问题的源程序如下:
#include "stdio.h"
#