用代码解九连环。
先看效果:
音频使用百度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源码可下载附件查看。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。