Actionscript 3.0实现的约瑟夫问题

问题:

设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);
			}
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值