01
2016
12

解九连环

用代码解九连环。

先看效果:

获得 Adobe Flash Player

音频使用百度tts生成。

解九连环和汉诺塔类似,都是典型的递归。

九连环的规律是:

从右往左编号1-9,要想操作(解下或挂上)第n环,需要挂上第n-1环,摘下第n-2到第1环。

比如,第1环可以直接操作;要想操作第2环,需要挂上第1环;要想操作第3环,需要挂上第2环,摘下第1环;要想操作第4环,需要挂上第3环,摘下第2、第1环。以此类推。

规律有了,就可以用代码求解了。

比如,js代码如下:

Array.prototype.daoxu=function(){
	var a=[];
	for(var i=this.length-1;i>=0;i--){
		a.push(this[i]);
	}
	return a.join(",");
}
/*
console.log=function(s){
	document.write("<p>"+s+"</p>");
}
*/
var jiulianhuan=[1,1,1,1,1,1,1,1,1];
var nn=0;
console.log(jiulianhuan.daoxu());
for(var i=8;i>=0;i--){
	zhaixia(i);
}

function zhaixia(n){
	if(jiulianhuan[n]==1){
		if(n==0){
			nn++;
			jiulianhuan[n]=0;
			console.log(nn+":\t摘下"+(n+1)+"\t"+jiulianhuan.daoxu());
		}
		else{
			guashang(n-1);
			for(var i=n-2;i>=0;i--){
				zhaixia(i);
			}
			nn++;
			jiulianhuan[n]=0;
			console.log(nn+":\t摘下"+(n+1)+"\t"+jiulianhuan.daoxu());
		}
	}
}
function guashang(n){
	if(jiulianhuan[n]==0){
		if(n==0){
			nn++;
			jiulianhuan[n]=1;
			console.log(nn+":\t挂上"+(n+1)+"\t"+jiulianhuan.daoxu());
		}
		else{
			guashang(n-1);
			for(var i=n-2;i>=0;i--){
				zhaixia(i);
			}
			nn++;
			jiulianhuan[n]=1;
			console.log(nn+":\t挂上"+(n+1)+"\t"+jiulianhuan.daoxu());
		}
	}
}

as版源码,apk源码可下载附件查看。


源码打包下载

apk下载

« 上一篇下一篇 »

相关文章:

显示fps  (2020-1-19 9:16:17)

js保留有效数字  (2019-7-30 15:32:12)

js的parseInt方法  (2019-2-15 9:12:44)

闪电效果  (2017-11-28 15:4:19)

js中判断一个对象的类型  (2017-3-30 14:27:35)

线段与椭圆的交点  (2017-1-6 14:43:41)

as3录制swf并保存flv视频  (2016-12-28 8:43:41)

DataURL与File,Blob,canvas对象之间的互相转换的Javascript  (2016-11-25 14:58:41)

as3实现setTimeout和trace  (2016-11-10 16:47:37)

js生成条形码-barcode  (2016-10-12 15:59:51)

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。