KK's Steel菲波那切数列的应用

Description

Our lovely KK has a difficult mathematical problem:he has a N\left( 1\leq N\leq {10}^{18}\right) meters steel,he will cut it into steels as many as possible,and he doesn't want any two of them be the same length or any three of them can form a triangle.
 

Input

The first line of the input file contains an integer T\left( 1\leq T\leq 10\right), which indicates the number of test cases. 

Each test case contains one line including a integer N\left( 1\leq N\leq {10}^{18}\right),indicating the length of the steel.
 

Output

For each test case, output one line, an integer represent the maxiumum number of steels he can cut it into.
 

Sample Input

1 6
 

Sample Output

3

Hint

1+2+3=6 but 1+2=3 They are all different and cannot make a triangle.

把一个数分成不等的数相加 并且这些数任意三个不能构成三角形  

直接求这个数可以分出多少个菲波那切数

#include<bits/stdc++.h> 
__int64 zu[200001];
int main()
{	
	for(__int64 i=2;i<200001;i++)
          {
     	    zu[1]=1;
     	    zu[2]=2;
     	    zu[i+1]=zu[i]+zu[i-1];
		 }
	__int64 t,n;
	scanf("%I64d",&t);
	while(t--)
	{
		 __int64 cut=0;
		  scanf("%I64d",&n);
		  if(n<6)
		  {
		  	printf("0\n");
		  	continue;
		  }
     	   for(__int64 i=1;i<200001;i++)
     	   {
     	   	n-=zu[i];
     	   	if(n<0)
     	   	{
     	   		  	break;
				 } 
     	   	cut++;
			}
	
		printf("%I64d\n",cut);
	}
	return 0;
}


posted @ 2019-12-12 09:00  千金一发  阅读(90)  评论(0编辑  收藏  举报