一共十六个盘子,盘子必须从小到大排列,只能在abc三个塔自由移动,一次只能移动一个!求源码
这个要递推,假设开始的时候全部在a塔上,目标是全部移到c塔上。
从一个盘子开始:
3.三个盘子,那么我们需要先将上面两个移到b塔,按照2中给出的方法来,移动两个需要的步数是3;再将最下面的移到c塔,需要1步;再将b塔的两个移到c塔,需要3步;所以总计7步。
4.四个盘子,那么我们需要先将上面三个移到b塔,按照3中给出的方法来,移动两个需要的步数是7;再将最下面的移到c塔,需要1步;再将b塔的三个移到c塔,需要7步;所以需要15
。。。
所以我们可以推出一个公式:
a(n) = a(n-1)*2 + 1
其中 a(1) = 1
public class Test {
public static void main(String []args) {
int a[] = new int[20];
a[1] = 1;
for(int i=2;i<19;i++) {
a[i] = a[i-1]*2 + 1;
}
System.out.println("16个盘子:"+a[16]);
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。