题目描述 :
牛牛有一根长度为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;
}
}
};完全跟着直播敲的,不是很明白,需要在多想想
新手菜鸡,慢慢加油!

京公网安备 11010502036488号