列表

详情


NC207551. 牛牛切木棒

描述

有一根长度为a的木棒,现在想将木棒分成一些段(每段木棒长度必须为整数),使得分隔后的木棍中,任意三段都不能构成三角形,求木棒最多被分成几段呢?

输入描述


示例1

输入:

5

输出:

3

说明:

可以分成1 1 3三段

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Python(2.7.3) 解法, 执行用时: 22ms, 内存消耗: 5812K, 提交时间: 2020-11-20 20:07:28

#
# 
# @param a long长整型 木棒的长度
# @return int整型
#
class Solution:
    def stick(self, a):
        res = 2
        x, y = 1, 1
        cur = 2
        while cur + x + y <= a:
            cur += x + y
            x, y = y, x + y
            res += 1
        return res

C++(clang++11) 解法, 执行用时: 2ms, 内存消耗: 400K, 提交时间: 2020-11-20 20:14:09

class Solution {
public:
	#define ll long long
    int stick(long long a) {
    	ll x=1,y=1,tot=2;
    	int cnt=2;
    	while(1){
    		ll t=x;
    		x=y,y=x+t;
			if(tot+y<=a) tot+=y,cnt++;
			else break;
		}
		return cnt;
    }
};

Go(1.14.4) 解法, 执行用时: 2ms, 内存消耗: 896K, 提交时间: 2020-11-20 21:27:19

package main

// github.com/EndlessCheng/codeforces-go
func stick(A int64) int {
	f := [99]int{1: 1}
	for i := 2; i < 99; i++ {
		f[i] = f[i-1] + f[i-2]
	}
	i := 1
	for a := int(A); a >= f[i]; i++ {
		a -= f[i]
	}
	return i - 1
}

C(clang11) 解法, 执行用时: 2ms, 内存消耗: 380K, 提交时间: 2020-11-20 20:52:51

int stick(long long a ) {
    long long x=1,y=1,z=1,sum=2,t=2;
    while(1){
        x=y;
        y=z;
        z=x+y;
        sum+=z;
        t++;
        if(a==sum||sum+y+z>a)
            return t;
    }
}

Python3(3.9) 解法, 执行用时: 30ms, 内存消耗: 6900K, 提交时间: 2020-11-20 21:25:37

#
# 
# @param a long长整型 木棒的长度
# @return int整型
#
class Solution:
    def stick(self , a ):
        m,n,k = 1,1,0
        while m+n<a:
            m,n = n,m+n
            k += 1
        return k

上一题