列表

详情


NC207425. 三角形

描述

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

输入描述

输入数据的第一行是t,表示数据的组数, 接下来每组数据输入一个a
(t<=1000, 1 <= a < 2^64 - 1)

输出描述

对于每组输入样例,打印木棒最多被分为多少段

示例1

输入:

2
1
3

输出:

1
2

原站题解

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

Ruby(2.4.2) 解法, 执行用时: 72ms, 内存消耗: 7280K, 提交时间: 2020-05-31 14:15:52

fib = [0, 1]
sum = [0, 1]
for n in 2..666
	fib[n] = fib[n - 1] + fib[n - 2]
	sum[n] = sum[n - 1] + fib[n]
	break if sum[n] >= 2**64
end
STDERR.puts sum.size

gets.to_i.times do
	a = gets.to_i
	for n in 1..666
		if sum[n + 1] > a
			puts n
			break
		end
	end
end

C++11(clang++ 3.9) 解法, 执行用时: 5ms, 内存消耗: 488K, 提交时间: 2020-05-31 16:07:20

#include <iostream>
using namespace std;

int t;
unsigned long long a,b,c,i;

int main(){
	cin>>t;
	while(t--){
		cin>>a;
		b=0,c=1,i=0;
		while(c<=a){
			a-=c;
			c+=b;
			b=c-b;
			++i;
		}
		cout<<i<<endl;
	}
	return 0;
}

Python(2.7.3) 解法, 执行用时: 36ms, 内存消耗: 2912K, 提交时间: 2020-05-31 15:23:19

t = int(input())
a = [1,1]
for i in range(2,200):
    a.append(a[i-1]+a[i-2])
while t:
    n = int(input());
    i=0;
    while n>=a[i]:
        n-=a[i]
        i+=1
    print("%d" %i) 
    t-=1

pypy3(pypy3.6.1) 解法, 执行用时: 98ms, 内存消耗: 21836K, 提交时间: 2020-05-31 13:43:13

T=int(input())
for _ in range(T):
    n=int(input())
    i=[0,1]
    ans=0
    while n>=i[1]:
        n-=i[1]
        i[0]+=i[1]
        i[0],i[1]=i[1],i[0]
        ans+=1
    print(ans)

Python3(3.5.2) 解法, 执行用时: 84ms, 内存消耗: 3904K, 提交时间: 2020-06-01 19:40:34

t = int(input())
for loop in range(0, t):
    a = int(input())
    b, c, i = 0, 1, 0
    while c <= a:
        a -= c
        c += b
        b = c - b
        i += 1
    print(i)

上一题