牛牛切木棒

三角形两边之和大于第三边,因此不构成三角形的条件就是存在两边之和不超过另一边。所以就是贪心的使得尽量多的段能构成的总长度最小,即按照斐波那契数列的方法切割可以使得切割的段数最大,1,1,2,3,5这样可以使得任意三根木棒不能组成三角形,最后无法切割的部分加到最长的一根里面即可。

class Solution {
public:
    /**
     * 
     * @param a long长整型 木棒的长度
     * @return int整型
     */
    int stick(long long a) {
        ull ans = 2;
        ull now = 1, sum = 2;
        ull x = 1, y = 1;
        if(a == 1) {puts("1"); return 0;}
        while(1)
        {
            now = x + y;
            if(now > a - sum ) break;
            now = x + y;
            x = y;
            y = now;
            ans ++;
            sum = sum + now;
        }
        return ans;
        // write code here
    }
};
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务