标题:[求助]这个程序哪儿有错啊?!
只看楼主
ephemerality
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-6-7
 问题点数:0 回复次数:2 
[求助]这个程序哪儿有错啊?!

约瑟夫环:将编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个开始按顺时针方向自1开始报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。设m的初值为20,密码为:3,1,7,2,4,8,4。

#include<stdlib.h>
#include<iostream.h>

typedef struct LNode
{
int num,pwd;
struct LNode *next;
}LNode, *LinkList;

void main()
{
int a,i,m,n,j;//m为报数上限值,n为人数,j为输入的密码;
cout<<"please enter m and n:";
cin>>m>>n;
LinkList head,p,pt;//head为头节点的指针,p为当前指针的前一指针,pt为当前指针;
head=(LinkList)malloc(sizeof(LNode));
p=head;
for(i=1;i<n;i++)
{
pt=(LinkList)malloc(sizeof(LNode));
p->next=pt;
p=pt;
}
pt->next=head;
pt=head;
p=head;//建立n个节点;

cout<<"please enter the password:";
for(i=1;i<=n;i++)
{
cin>>j;
p->num=i;
p->pwd=j;
p=p->next;
}
pt=head;
p=head;//输入各个人的密码;

for(i=1;i<n;i++)

pt=p;//找寻最后一个节点;

for(i=1;i<=n;i++)
{
for(a=1;a<m;a++)
{
p=p->next;
}
pt=p;
m=pt->pwd;
cout<<pt->num;
p->next=pt->next;
free(pt);
pt=p;//输出各人的编号;
}
}
我在 VISUAL C++里运行总是显示内存引用失败。找了半天错也没找出来。大家帮忙看一下哪儿错了啊?

搜索更多相关主题的帖子: 密码 include 约瑟夫 顺时针 
2006-06-09 16:18
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
得分:0 
以下是引用ephemerality在2006-6-9 16:18:17的发言:

约瑟夫环:将编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个开始按顺时针方向自1开始报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。设m的初值为20,密码为:3,1,7,2,4,8,4。

#include<stdlib.h>
#include<iostream.h>

typedef struct LNode
{
int num,pwd;
struct LNode *next;
}LNode, *LinkList;

void main()
{
int a,i,m,n,j;//m为报数上限值,n为人数,j为输入的密码;
cout<<"please enter m and n:";
cin>>m>>n;
LinkList head,p,pt;//head为头节点的指针,p为当前指针的前一指针,pt为当前指针;
head=(LinkList)malloc(sizeof(LNode));
p=head;
for(i=1;i<n;i++)
{
pt=(LinkList)malloc(sizeof(LNode));
p->next=pt;
p=pt;
}
pt->next=head;
pt=head;
p=head;//建立n个节点;

cout<<"please enter the password:";
for(i=1;i<=n;i++) //这里改成(i=1;i<n;i++)
{
cin>>j;
p->num=i;
p->pwd=j;
p=p->next;
}
pt=head;
p=head;//输入各个人的密码;

for(i=1;i<n;i++)

pt=p;//找寻最后一个节点;

for(i=1;i<=n;i++)
{
for(a=1;a<m;a++)
{
p=p->next;
}
pt=p;
m=pt->pwd;
cout<<pt->num;
p->next=pt->next;
free(pt);
pt=p;//输出各人的编号;
}
}
我在 VISUAL C++里运行总是显示内存引用失败。找了半天错也没找出来。大家帮忙看一下哪儿错了啊?

其实还有很多错的,基本上这样来建立单链表很大问题,最好就是建立单链表的时候就立刻赋值,还有用cin的时候最好将之前的缓冲流清空


c++/C + 汇编 = 天下无敌
2006-06-09 18:32
xr_bobo
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-5-23
得分:0 
for(i=1;i<=n;i++)
{
for(a=1;a<m;a++)
{
p=p->next;
}
pt=p;
m=pt->pwd;
cout<<pt->num;
p->next=pt->next;
free(pt);
pt=p;//输出各人的编号;
}
我觉得这段代码并没把要删的删掉

高处何所有,是满身的伤痕,无限的孤独和想起千古英雄的无限感慨!
2006-06-10 09:15



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




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

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