题目描述 :
牛牛有一根长度为a(3≤a≤1e18)的木棒,现在牛牛想将木棒分成一些段(每段木棒长度必须为整数),使得分隔后的木棍中,任意三段都不能构成三角形,牛牛想知道木棒最多被分成几段呢?
题目解析:
首先思考
(1)什么情况下不能构成三角形?
答:存在两边之和小于等于第三边
(2)什么情况下能构成最多的三角形?
答:两个短边之和等于第三边
(3)联想到什么??
斐波拉切数列
如何求斐波拉切数列?
long long arr[61]; arr[0]=1; arr[1]=1; for(int i=2;i<=60;i++) { arr[i]=arr[i-1]+arr[i-2]; }
解题代码:
class Solution { public: /** * * @param a long长整型 木棒的长度 * @return int整型 */ int stick(long long a) { // write code here long long arr[61]; arr[0]=1; arr[1]=1; for(int i=2;i<=60;i++) { arr[i]=arr[i-1]+arr[i-2]; } long long sum=0; for(int i=0;i<=60;i++) { sum+=arr[i]; if(sum>a) return i; } } };
完全跟着直播敲的,不是很明白,需要在多想想
新手菜鸡,慢慢加油!