zcmu1461

1461: 天坑的繩子

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 105  Solved: 61
[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
解題思路:由於題目要求的是最多的繩子段數,且任意三段都不能構成三角形,又因爲構成三角形的條件可以爲任意兩邊之和大於第三邊。由此聯想到斐波那契數列,前兩項的和等於第三項。正好不能構成三角形,且又是分的最細的。因此,只要用繩子的長度不斷減去數列的項,直到繩子沒有爲止。
解題心得:在比賽的時候,絲毫沒有思路,也沒有聯想到斐波那契數列,也是在同學的指導下完成的。
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;
}

希望能幫到你們~
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章