你好 请帮我回答一下这个问题 用数据结构知识怎样解决约瑟夫环问题? C语言 而且要用到数组方面的知识

如题所述

#include <stdio.h>
#define M 10/*总人数*/
#define N 5
#define START 0/*第一个报数的人*/
void main(void)
{   int a[M],i=0,k,count=0;
while(i++<M)/*给每个人编号*/
a[i-1]=i;
for(i=START;count<=M-1;count++)
{   for(k=1;k<=N;a[i++]&&++k)/*根据&&运算的路短原理,若a[i]为0的话,++k的运算会被省略而++i的运算总会进行*/
if(i>M-1)   i=0;
printf("%d ",i?a[i-1]:a[M-1]);
a[(i?(i-1):(M-1))]=0;
}
getch();
}追问

功能:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,每个人持有一个正整数密码。开始时任选一个正整数做为报数上限m,从第一个人开始顺时针方向自1起顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他的下一个人开始重新从1报数。如此下去,直到所有人全部出列为止。令n最大值取30。要求设计一个程序模拟此过程,求出出列编号序列。
要求:用数组实现 亲 题目是这样的

来自:求助得到的回答
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-07-08
问题呢?追问

功能:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,每个人持有一个正整数密码。开始时任选一个正整数做为报数上限m,从第一个人开始顺时针方向自1起顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他的下一个人开始重新从1报数。如此下去,直到所有人全部出列为止。令n最大值取30。要求设计一个程序模拟此过程,求出出列编号序列。
要求:用数组实现 谢谢

数据结构中的约瑟夫环问题用C语言怎么编写出来啊?
1. 程序分析:这是一个比较经典的算法--约瑟夫环问题.2.个人分析: 算法比较经典,对于这样的问题本应该使用链表的形式会比较容易.约瑟夫环算法 则体现了使用数组来完成链表该完成的功能,虽然形式上完全不相同,但却求出了 相同的结果.有异曲同工之妙.总之我个人认为是数组中非常经典的算法了.希望本 ...

约瑟夫环问题怎么解决啊?请用C语言写代码,谢谢!
} 我这个学期也搞数据结构 程序可以运行的

数据结构课程设计《报数游戏》队列问题 c语言
约瑟夫环问题:如果你用队列做的话,设一个计数器,如果计数器<m就出队后再入队,等于m时那个元素只出队不入队,输出这个元素并且让m等于0。循环到队列为空就行了。

约瑟夫环公式是怎样推导出来的?
这个就是约瑟夫环问题的实际场景,有一种是要通过输入n,m,k三个正整数,来求出列的序列。这个问题采用的是典型的循环链表的数据结构,就是将一个链表的尾元素指针指向队首元素。 p->link=head。2、解决问题的核心步骤:1.建立一个具有n个链结点,无头结点的循环链表。2.确定第1个报数人的位置。3...

约瑟夫环公式是怎样推导出来的?
这个就是约瑟夫环问题的实际场景,有一种是要通过输入n,m,k三个正整数,来求出列的序列。这个问题采用的是典型的循环链表的数据结构,就是将一个链表的尾元素指针指向队首元素。 p->link=head。2、解决问题的核心步骤:1.建立一个具有n个链结点,无头结点的循环链表。2.确定第1个报数人的位置。3...

相似回答