您的位置:首页 > 其它

约瑟夫问题-循环链表

2009-09-14 09:36 197 查看
有M个人,其编号分别为1-M。这M个人按顺序排成一个圈(如图)。现在给定一个数N,从第一个人开始依次报数,数到N的人出列,然后又从下一个人开始又从1开始依次报数,数到N的人又出列...如此循环,直到最后一个人出列为止

input:
输入只有一行,包括2个整数M,N。之间用一个空格分开

output:
输出只有一行,包括M个整数

input:
8 5

output:
5 2 8 7 1 4 6 3

分析:简单模拟,本题也可以使用数学算法具体请参考http://blog.csdn.net/bobcowwocb/archive/2009/09/08/4532033.aspx

【参考程序】:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct node
{
int
code;
node *
next;
};
int
n,m,i,j;
int main(void
)
{
node * head,* tail,* no,*
p2;
no=new
node;
no->code=1
;
no->next=NULL
;
head=tail=no
;
scanf("%d%d",&n,&m
);
for (i=2;i<=n;i++
)
{
no=new
node;
no->code=i
;
no->next=NULL
;
tail->next=no
;
tail=no
;
}
tail->next=head
;
for (i=1;i<=n-1;i++
)
{
j=1
;
while (j<=m-1
)
{
no=no->next
;
j++
;
}
printf("%d ",no->next->code
);
p2=no->next
;
no->next=no->next->next
;
delete
p2;
}
printf("%d/n",no->code
);
system("pause"
);
return 0
;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: