表哥的面包

Problem:1142

Time Limit:1000ms

Memory Limit:65535K

Description

可爱的表哥遇到了一个问题,有一个长为N(1≤N≤10^18)的长条状面包,问最多可以切成几段,使得每段面包的长度互不相等且均不能围成三角形。

Input

第一行一个T(1≤T≤10),表示T组数据
接着T行,每行一个整数N(1≤N≤10^18)表示面包的长度

Output

输出可以分成的段数

Sample Input

1
6

Sample Output

3

Hint

可以分成三段,每段长度是1,2,3

Source

题解:斐波那契数列

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int i;
long long a[];
a[]=,a[]=;
for(i=;i<=;i++)
a[i]=a[i-]+a[i-];
for(i=;i<=;i++)
a[i]=a[i]+a[i-];
long long n,t;
scanf("%lld",&t);
while(t--)
{
scanf("%lld",&n);
// 是 互 不 相 等 不能出现两个1 永远也不能出现 不是2的时候不能出现
for(i=;i<=;i++)
{
if(a[i]>n)
break;
}
cout<<i-<<endl;
}
return ;
}
05-11 11:33