當前位置:菜譜大全網 - 菜譜 - 爬梯菜單

爬梯菜單

假設n格梯有f(n)個方法。

然後:

f(1) = 1

f(2) = 2

右n & gt2、有:

F(n) =(先有壹個網格,然後n-1網格的方法數)+(先有兩個網格,然後n-2網格的方法數)

也就是

f(n) = f(n-1) + f(n-2)

所以f(n)是斐波那契數列的n+1項?

# include & ltstdio.h & gt

長纖維(整數)

{ if (n == 1 || n == 2)返回1;

返回光纖(n - 1) +光纖(n-2);

}

主()

{ int n;

scanf("%d ",& ampn);

printf("%ld\n ",fib(n+1));

返回0;

}

/*

練習9:上樓梯★★

上樓梯,可以壹個壹個上樓梯,也可以兩個兩個來。

也可以隔壹兩步上,甚至壹次k步。

問題是,如果最後壹步數是n,每壹步可以上到1到k步,

妳走了多少路?

如果n = 5,k = 2,是的。

1,1,1,1,1

2,1,1,1

1,2,1,1

1,1,2,1

1,1,1,2

2,2,1

2,1,2

1,2,2

共8種。

輸入步數n (1

5 2

5 3

輸出:

13

難度:容易

*/

# include & ltstdio.h & gt

# include & ltstring.h & gt

int d[31][31];

int dfs(int left,int k)

{

int I;

if(d[left][k]!=-1)返回d[left][k];

如果(!左)返回1;

d[left][k]= 0;

for(I = 1;我& lt=((left & lt;k)?左:k);i++)

d[left][k]+=dfs(left-i,k);

return d[左][k];

}

int main(void)

{

int n,k;

memset(d,-1,sizeof(d));

while(scanf("%d%d ",& ampn & amp;k)!=EOF)

printf("%d\n ",dfs(n,k));

返回0;

}