[第五届蓝桥杯省赛C++B组]切面条

来源:第五届蓝桥杯省赛C++B组

算法标签 递推

题目描述:

一根高筋拉面,中间切一刀,可以得到2根面条。
如果先对折1次,中间切一刀,可以得到3根面条。
如果连续对折2次,中间切一刀,可以得到5根面条。
那么,连续对折10次,中间切一刀,会得到多少面条呢?
答案是个整数,请通过浏览器提交答案。不要填写任何多余的内容。

题目答案:

1025

题目思路:

观察表述,所有x有对应y.

x y
0 2
1 3
2 5 

不难理解,所有当前状态下的面条都更新为上一个的(N-1)*2+切割状态中不变的一个。
在这个过程中,未对折的f0不受影响。
则我们发现,所有当前状态都受到上一个状态决定,是递推,得到(f[i-1]-1)*2+1,拆开即为f[i]=f[i-1]*2-1;

题目代码:

#include

using namespace std;

int main()
{
    int f[10];
    f[1]=3;
    for(int i=2;i<11;i++)f[i]=f[i-1]*2-1;//等同(f[i-1]-1)*2+1
    cout<<f[10];
}

你可能感兴趣的:(蓝桥杯)