ZCMU-1461-天坑的绳子

1461: 天坑的绳子

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值