约瑟夫环的C语言和86/88汇编非递归算法

网友投稿 233 2022-10-31


约瑟夫环的C语言和86/88汇编非递归算法

约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后结果+1即为原问题的解。 我这个解决方案是,从1到n进行编号,打印出这些人的编号的出列顺序。

我是第一个发表对约瑟夫环的非递归算法(采用数组实现),发表时间是2006年6月。是对一个2004年的一个百度提问的解答。现在已经找不到那个帖子了。当时我给的结解决方案是用宏制定输入的人数和报数上线。 约瑟夫环的数组实现方法,虽然代码比代码多些,但是很好理解,并且理论上的解析范围比递归算法大的多(像汉诺塔问题用递归,达到63层跌代以上程序就跑飞了)。现在N多人都是改编的我的方案。 C语言实现约瑟夫环: /*********************************************************** 该程序是用C语言实现约瑟夫环的高效算法,它比链表有更高的空间和时间效率。 但它只支持最多人数为128人,若想实现支持更多人数只需要修改数组a的大小。 ***********************************************************/

#includemain(){ int a[128],b[128]; int i,code,k,m,n,s,t; printf("输入初始报数上限值m:"); scanf("%d",&m); if(m <= 0) { return; } printf("输入人数n:"); scanf("%d",&n); for(i=0;i

我解决约瑟夫环的非递归算法的时间见图片:

我做的再window xp下运行我的汇编程序是在我2005年上学时做的,幸亏当时写了操作手册,不然现在我还运行不了呢!修改操作手册在window7(64位操作系统)上操作成功。

运行结果如下:

该问题的代码运行操作见文章:86/88汇编代码的运行调试


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:表格横向布局及分页实现原理
下一篇:关于IntelliJ IDEA 打包代码报错的问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~