有没有人知道这个咋搞吗,脑袋快爆炸了
题目是这个:
有n个人按顺序顺时针围成一圈,每人持有一个密码(正整数),每个人密码不同。开始时任选一个整数作为报数上线值m,从第1个人开始顺时针自1开始顺序报数,报道m时停止报数。报m的人出圈,将他的密码作为新的m值,接着从出圈的下一个人开始重复此过程,直到所有人出圈为止。要求设计一个程序,利用单循环链表模拟此过程,按照出圈顺序输出各人的编号。
我看网上好多程序都是以一个固定的密码值来循环不符合题意,就想着自己来编写,结果下面的代码debug完,成空白了,就显示请按任意键继续
#include<stdio.h>
#include<stdlib.h>
typedef struct node/*定义结点类型*/
{
int num;
int pwd;
struct person*next;
}person;
void InitCL(person *CL)/*链表初始化*/
{
CL=(person*)malloc(sizeof(person));/*为头结点分配空间*/
CL->next=CL;/*建立头结点*/
}
void creatCL(person *CL)
{
int m,n;
printf("请输入总人数和初始密码值");
scanf("%d %d\n",&m,&n);//m:总人数,n:初始密码值,rear:尾指针
person *rear,*p;
rear=CL;/*rear指针动态指向表尾,初值指向头结点*/
int i=0;/*i为计数器*/
for(i=0;i<m;i++)
{
p=(person*)malloc(sizeof(person));//分配新结点空间
p->num=i+1;//设置结点编号
scanf("%d",&p->pwd);
rear->next=p;
rear=p;
rear->next=CL;/*让最后一个结点的指针域指向头结点*/
}
}
void Josephus(person *CL)
{
int m,n;
person *rear;
rear=CL;/*rear指针动态指向表尾,初值指向头结点*/
int i=0,count=0,mod;
person *p,*q;
q=rear->next;
p=q->next;
mod=n%m;
printf("密码 出列顺序");
for(count=0;count<m;count++)
{
if(i=m)
{
i=0;
}
while(i!=m)
{
i++;
if(mod=p->num)
{
printf("%d %d",p->pwd,p->num);
n=p->pwd;
mod=n%m;
q->next=p->next;
free(p);
}
q=q->next;
p=p->next;
}
}
}
int main(void)
{
void InitCL(person *CL);
void creatCL(person *CL);
void Josephus();
system("pause");
}