题目描述 :
牛牛有一根长度为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;
        }
    }
};

完全跟着直播敲的,不是很明白,需要在多想想
新手菜鸡,慢慢加油!