Actionscript 3.0实现的约瑟夫问题

来源:互联网 发布:淘宝销量排行榜 编辑:程序博客网 时间:2024/05/17 03:15

问题:

设n个人围坐在一圆桌周围,依次编号为1,2,...,n,从第s个人从1开始依次报数,数到m的人出列,然后从出列的下一个人重新开始报数,数到m的人又出列,…,如此反复直到所有的人全部出列为止。对于任意给定的n,s和m,输出按出列次序得到的n个人员的序列。(数据结构问题,请分别用顺序表和链表解决此问题,并自编多组数据测试)

利用数组来解决这个问题主要是在一次报数的时候数组会越界,这时得接着前面编号,这样就相当玩组成一个环形纽带

下面是Actionscript 3.0里的代码:

package{import flash.display.Sprite;public class Josephus extends Sprite{private var _initData:Array;private static var COUNT:int = 2;    //中间相隔几个数private static var TOTALNUMBER:int = 9;   //总共的人数,private static var START_NUMBER:int = 3;  //从第几号开始报数public function Josephus(){_initData = new Array();initData();showJosephus();}private function showJosephus():void{var temp:int = START_NUMBER;for(var i:int = 0 ;i<_initData.length-1;i++){for(var j:int = 0 ; j<COUNT ; j++){temp = temp%_initData.length;temp++;}temp = temp - 1;trace(_initData[temp]+"\n");_initData.splice(temp , 1);i--;}trace("最后剩下的人的编号是:"+_initData[0]);}private function initData():void{for(var i:int = 1;i<=TOTALNUMBER;i++){_initData.push(i);}}}}

原创粉丝点击