1461: 天坑的绳子
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 119 Solved: 71
[ Submit][ Status][ Web Board]
Description
天坑有一条长度为n的绳子,天坑想要把这条绳子切成尽可能多的段,并且每段的长度必须为大于等于1的整数而且任意三段绳子都不能组成三角形。请问最多能切几段?
Input
测试文件的第一行有一个正整数T,代表一共有T组测试数据。
每组测试数据的第一行为一个正整数n(1<=n<=100000000)。
Output
对于每组测试数据,输出对应的答案。
Sample Input
3
1
2
4
Sample Output
1
2
3
【解析】
其实这道题大家可以找下规律,就是要求切多少段,每三段都不能组成三角形,其实我们列出前几个也就可以知道
其实和斐波那契数列有关,前两个之和等于第三边不能构成三角形,而且后面的一定比前面的大所以肯定不能构成
三角形,那我们就可以用绳子的长度不断的减去斐波那契数列,直到绳子剩下的长度比斐波那契数列小的时候再停
下就可以了。
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
using namespace std;
int main()
{
int t,i;
long long n,a[110],count1;
a[0]=1,a[1]=1;
for(i=2;i<110;i++)
{
a[i]=a[i-1]+a[i-2];
}
scanf("%d",&t);
while(t--)
{
count1=0;
scanf("%lld",&n);
for(i=0;;i++)
{
if(n-a[i]<0)
break;
n=n-a[i];
count1++;
}
printf("%lld\n",count1);
}
return 0;
}