字典翻译 问答 其它 约瑟夫环问题,急!题目要求-所用的单循环链表中不需要“头结点”,我不会,请教各位高手!约瑟夫环问题[问题描述]编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人持有一个密码(正
问题标题:
约瑟夫环问题,急!题目要求-所用的单循环链表中不需要“头结点”,我不会,请教各位高手!约瑟夫环问题[问题描述]编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人持有一个密码(正
问题描述:

约瑟夫环问题,急!

题目要求-所用的单循环链表中不需要“头结点”,我不会,请教各位高手!

约瑟夫环问题

[问题描述]

编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人持有一个密码(正整数).一开始任选一个正整数作为报数上限值m,从第一个人开始顺时针方向自1开始顺序报数,报到m时停止报数.报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止.设计一个程序来求出出列顺序.

[基本要求]1.利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号.此题所用的循环链表中不需要“头结点”,请注意空表和非空表的界限.

2.向上述程序中添加在顺序结构上实现的部分.

[测试数据]m的初值为20,n=7,7个人的密码依次为3,1,7,2,4,7,4,首先m=则正确的输出是什么?

要求:

输入数据:首先输入待处理人员数及他们的密码,然后输入m的初值,建立单循环链表.

输出形式:建立一个输出函数,将正确的出列序列输出.

编程语言是C++.

刘阳回答:
  这个是我写滴带头节点滴   C语言的,给你参考参考   /*计算机071冯**编写的约瑟夫环   单项循环链表实现原创程序   在结构体中定义了一个序号,使得空间变大,但是程序简单易懂   */   #include   #include   structnode   {   intnum;//为方便表达,每个节点拥有一个序号   intpassword;//密码   structnode*next;   };   node*creatlist(intpeople)//构造链表   {   inti=1;//序号   int_password;   node*r,*s;   node*L=(node*)malloc(sizeof(node));//创造头结点   r=L;   while(inum=i;   s->password=_password;   r->next=s;   r=s;   i++;   }   r->next=L;//循环链表   returnL;   }   voidgetoutseq(node*L,intfirstp)//计算出列顺序并输出的函数   {   int_password=firstp;   node*p=L;   node*r=L;//r为p的前驱节点   inti=1;   while(L->next!=L)//当L为非空表时一直循环,空表表示所有人已经出列,则退出循环   {   while(inext!=L)//当p的下一个节点非头结点,直接向下移   {   r=p;//p移动前先备份   p=p->next;   }   else//当p的下一个节点是头节点,则令p指向一号节点   {   r=L;   p=L->next;   }   i++;   }   printf("%d号出列n",p->num);   _password=p->password;//获取节点中的密码   r->next=p->next;//删除并释放p   free(p);   i=1;   p=r;   }   printf("结束!n");   }   /*   voidprint(node*L)//该函数用于打印每个节点的信息,方便测试   {   node*p=L->next;   while(p!=L)   {   printf("序号%d密码%dn",p->num,p->password);   p=p->next;   }   }   */   intmain()   {   node*list;   intpeople;   intfirstp;   printf("请输入人数:");   scanf("%d",&people);   putchar('n');   printf("请输入初始密码:");   scanf("%d",&firstp);   putchar('n');   list=creatlist(people);   /*print(list);//该语句用于测试   */   getoutseq(list,firstp);   printf("按确定键退出.");   getchar();   getchar();   return0;
点击显示
其它推荐
热门其它推荐
  • 其它