约瑟夫问题
//约瑟夫问题,结果为什么异常?
//输入4 2 2
//4 2 2
// 1The last dot 2 4The last dot 2 2The last dot 3Press any key to con
//tinue
#include<stdio.h>
#include<malloc.h>
typedef struct node{
int data;
struct node *link;
}LNode,*LinkList;//连接点类型
main()
{
int n,m,k;
LinkList p,r,list=NULL;
int i;
scanf("%d %d %d",&n,&m,&k);
for(i=1;i<=n;i++){
p=(LinkList)malloc(sizeof(LNode));
p->data=i;
if(list==NULL){
list=p;
}
else{
r->link=p;//r是p的直接前驱。
}
r=p;
}
p->link=list;//list是第一个结点的指针,建立循环链表!
p=list;//p指向第一个结点!
for(i=1;i<k;i++){
r=p;
p=p->link;
}//p指向第k个结点,从第k个开始报数
while(p->link!=p){
for(i=1;i<m;i++){
r=p;
p=p->link;
}//此时p是要删除的节点指针,因为这个报到了m
r->link=p->link;//删除地址为p的节点
printf("%d",p->data);//输出这个节点的内容
free(p);
p=r->link;//重新将r的直接后驱建为p
}
printf("The last dot is %d",p->data);
}
[此贴子已经被作者于2007-10-1 11:25:10编辑过]