发现了一种诡异求法
逛群看到这么一道题
东东的妈妈从外地出差回来,带了一盒好吃又精美的巧克力给东东(盒内共有N块巧克力,0<N<40)。
妈妈告诉东东每天可以吃一块或者两块巧克力。假设东东每天都吃巧克力,问东东共有多少种不同的吃完巧克力的方案。例如,如果N=1,则东东第1天就吃掉它,共有1种方案;如果N=2,则东东可以第1天吃1块,第2天吃1块,也可以第1天吃2块,共有两种方案;如果N=3,则东东第1天可以吃1块,剩2块,也可以第1天吃2块,剩1块,所以东东共有2+1=3种方案;如果N=4,则东东可以第1天吃1块,剩3块,也可以第1天吃2块,剩2块,共有3+2=5种方案。现在给定N,请你写程序求出东东吃巧克力的方案数目。 【潜水】老刘(lbc-pc@qq.com) 22:44:34
简单说一下思路:假设有10块,则若10天吃完,则每天都吃1块,有1种吃法,9天吃完,则某天吃了2块,9种吃法,8天吃完,则某2天吃了2块,C(8,2)种吃法
【潜水】老刘(lbc-pc@qq.com) 22:49:52
如果最初块数是偶数n,则最少需要n/2天吃完,若是奇数,则最少需要(n+1)/2天吃完,偶数需要累加n/2次,奇数需要累加n-(n+1)/2=(n-1)/2次
然后出来的居然是斐波那契数列!?
附一个潦草的代码- For a = 1 To 100
- wsh.echo a,result(a)
- Next
-
- Function result(input)
- Dim ii : ii = 0
- Dim inp
- inp = input
- While ii <= inp
- result = result + C(inp,ii)
- ii = ii + 1
- inp = inp - 1
- Wend
- End Function
-
- Function C(a,b)
- Dim aa,bb,i
- aa = 1 : bb = 1
- For i = 1 To b
- aa = aa*(a+1-i)
- bb = bb*i
- Next
- C = aa/bb
- End Function
复制代码
|