一根面条,从中间切一刀,可以得到2根,若先对折一下再切,可以得到3根,若对折2次再切,可以得到5根面条,现在问若对折10次后再切,可以得到几根面条?
//这个我直接当场折叠了下,然后估算pow(2,10) + 1 与前几次吻合就直接开始写答案了
解题思路
切面条时, 切开的面条只会有2种情况:1是成为独立的面条,2是会和其它面条相连,那么,现在把和其它面条的称之为一个'结',当不计算这些'结'时,折了几次之后切完面条应该为2^(n+1)根:
1
2
3
4
5
6
7
|
/*
折N次后切 面条根数
0 2
1 4
2 8
3 16
*/
|
下来,再计算'结'的个数,由于一个'结'存在之后就不会消除,所以下一状态'结'数量就是当前结数量 + 对折后创造的'结'数量.而对折后创造的'结'数量就是当前面条的根数:
1
2
3
4
5
6
7
8
|
/*
对折次数 '结'数量
0 0
1 0 + 1
2 1 + 2
3 3 + 4
4 7 + 8
*/
|
最后,由于1个结相连了两根面条,所以当折了N次后,面条根数就是总共面条数 - 结数量:
1
2
3
4
5
6
7
8
9
|
/*
对折次数 面条数 结数 最终数量
0 2 0 + 0 2 - (0 + 0) = 2
1 4 0 + 1 4 - (0 + 1) = 3
2 8 1 + 2 8 - (1 + 2) = 5
3 16 3 + 4 16 - (3 + 4) = 9
...
10 2048 511 + 512 2048 - (511 + 512) = 1025
*/
|
答案就是1025根面条~