今天闲来无事,同学拿了个九连环过来玩,好吧,还真挺好玩的。刚上手什么都不会,同学提示解法里面有递归,还真是,奋斗三小时终于通关。
好了,不瞎扯,玩了之后写了个递归算法,也算是有点收获:
public class ChineseRing {
public static final int NUMBER = 9;
public void downAll(int a){
if(a==1){
System.out.println("Down The 1 Ring");
return;
}
if (a==0) {
return;
}
downAll(a-2);
System.out.println("Down The "+a+" Ring");
upALL(a-2);
downAll(a-1);
}
public void upALL(int a){
if(a==1){
System.out.println("Up The 1 Ring");
return;
}
if(a==0){
return;
}
upALL(a-1);
downAll(a-2);
System.out.println("Up The "+a+" Ring");
upALL(a-2);
}
public void start(int a){
downAll(a);
}
public void resume(int a){
upALL(a);
}
public static void main(String args[]){
new ChineseRing().start(ChineseRing.NUMBER);
System.out.println("================SPLIT_LINE======================");
new ChineseRing().resume(ChineseRing.NUMBER);
}
}
就这么多,清明就玩九连环去了......
九连环中除第一个环外的任意一个环能取下和放上去的充要条件是,前方有且仅有相邻的那一个环。
所以要取下第N个环,就得先取下前N-2个环,这样N的前方就只有第N-1个环。第N个环就能取下。
然后放回前N-2个环,对N-1递归!
要放回第N个环,就得让N前方有且只有第N-1个环,所以先放上前N-1个环,在放下前N-2个环,才能放上第N个环,然后放回前N-2个就完成了!
完了,写android去!