吾患 2013-10-18 15:01
浏览 1076

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

在做约瑟夫环的实验,但是运行结果一直不对,偶尔会往前挪一个数或者往后挪,求帮忙修改,捉急呀~谢谢!
#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");
}
}

  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥15 matlab实现基于主成分变换的图像融合。
    • ¥15 对于相关问题的求解与代码
    • ¥15 ubuntu子系统密码忘记
    • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
    • ¥15 保护模式-系统加载-段寄存器
    • ¥15 电脑桌面设定一个区域禁止鼠标操作
    • ¥15 求NPF226060磁芯的详细资料
    • ¥15 使用R语言marginaleffects包进行边际效应图绘制
    • ¥20 usb设备兼容性问题
    • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊