1461: 天坑的繩子
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 105 Solved: 61
[Submit][Status][Web Board]
Description
天坑有一條長度爲n的繩子,天坑想要把這條繩子切成儘可能多的段,並且每段的長度必須爲大於等於1的整數而且任意三段繩子都不能組成三角形。請問最多能切幾段?
Input
測試文件的第一行有一個正整數T,代表一共有T組測試數據。
每組測試數據的第一行爲一個正整數n(1<=n<=100000000)。
Output
對於每組測試數據,輸出對應的答案。
Sample Input
1
2
4
Sample Output
2
3
解題思路:由於題目要求的是最多的繩子段數,且任意三段都不能構成三角形,又因爲構成三角形的條件可以爲任意兩邊之和大於第三邊。由此聯想到斐波那契數列,前兩項的和等於第三項。正好不能構成三角形,且又是分的最細的。因此,只要用繩子的長度不斷減去數列的項,直到繩子沒有爲止。
解題心得:在比賽的時候,絲毫沒有思路,也沒有聯想到斐波那契數列,也是在同學的指導下完成的。
ac代碼:
#include <iostream>
#include<cstdio>
using namespace std;
int t,n,a[105],counts;
int main()
{
scanf("%d",&t);
a[0]=1;
a[1]=1;
for(int i=2;i<=100;i++)
{
a[i]=a[i-1]+a[i-2];
}
while(t--)
{
scanf("%d",&n);
counts=0;
for(int i=0;i<100;i++)
{
if(n-a[i]<0)
{
break;
}
n=n-a[i];
counts++;
}
printf("%d\n",counts);
}
return 0;
}
希望能幫到你們~