标题:DONE约瑟夫问题
只看楼主
zzxwill
Rank: 1
等 级:新手上路
帖 子:398
专家分:0
注 册:2007-8-15
 问题点数:0 回复次数:3 
DONE约瑟夫问题

//约瑟夫问题,结果为什么异常?
//输入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:26:40编辑过]

搜索更多相关主题的帖子: 约瑟夫问题 DONE dot int node 
2007-09-29 19:34
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
得分:0 

看了近10分钟终于看完你这个程序了,真累啊,我用VS2005编译,422 输出正常,下次能不能不要这么多p,m,n,x的,换成predNote NextNode或者别的有点意思的词语,以后看一眼就知道的东西。

2007-09-29 20:25
zzxwill
Rank: 1
等 级:新手上路
帖 子:398
专家分:0
注 册:2007-8-15
得分:0 

谢谢,我下次注意~~


一分耕耘,一分收获。
2007-10-01 11:26
缘吇弹
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:地球
等 级:版主
威 望:43
帖 子:3038
专家分:27
注 册:2007-7-2
得分:0 

呵呵,之前我也经历过.
改过就好啦


Repeat  Life=Study;Until (death);
2007-10-01 11:31



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-174108-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.801106 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved