2 u010330205 u010330205 于 2013.10.18 23:01 提问

约瑟夫环的实验运行结果一直不对

在做约瑟夫环的实验,但是运行结果一直不对,偶尔会往前挪一个数或者往后挪,求帮忙修改,捉急呀~谢谢!
#include
#include
#define Error -1
#define True 1
typedef struct LNode
{
int num;//定义人编号
int pwd;//密码
struct LNode *next;
}LNode;

LNode head,*p,*pt;//定义结点
int Createlinklist(int n) //建立循环链表函数,并传递n
{
int i;
head=( LNode
)malloc(sizeof(LNode));
if(!head) return Error;
p=head;
for(i=1;i {
pt= (LNode *)malloc(sizeof (LNode));
if(!pt) return Error;
p->next=pt;
p=pt;
}
p->next=head;
pt=head;
return True;
}

int enterpwd(int n)//建立输入密码函数
{
int i,j;
printf("\n请输入密码:");
for(i=1;i<=n;i++)
{
scanf("%d",&j);
pt->num=i;
pt->pwd=j;
pt=pt->next;
}
pt=p;
return j;
}

int outlist(int m,int n)//建立输出函数
{
int i;
int a;
for(i=1;i<=n;i++)
{
for(a=1;a {
pt=pt->next;
}
p=pt->next;
m=p->pwd;
printf(" %d",p->num);
pt->next=p->next;
free(p);
}
return 0;
}

void main()
{
int m,n;//m为报数上限,n为围圈人数
printf("请输入m,n:");
scanf("%d %d",&m,&n);
if(n<=0 || m<0)
{
printf("\n\n\t\t输入出错!最后一次重新输入机会~\n\n\n");
printf("请重新输入m,n:");
scanf("%d %d",&m,&n);
if(n<=0 || m<0)
{
printf("\n\n\t\t输入出错!请退出!\n\n");
printf("\n\n\t");
}
else
{
Createlinklist(n);//调用链表函数
enterpwd(n);//调用输入函数
printf("\n围圈人的出列顺序依次是:\t");
outlist(m,n);//调用输出函数
printf("\n\n\t");
}
}
else
{
Createlinklist(n);//调用链表函数
enterpwd(n);//调用输入函数
printf("\n出队的人依次是:");
outlist(m,n);//调用输出函数
printf("\n\n\t");
}
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!