表哥的面包
Problem:1142
Time Limit:1000ms
Memory Limit:65535K
Description
可爱的表哥遇到了一个问题,有一个长为N(1≤N≤10^18)的长条状面包,问最多可以切成几段,使得每段面包的长度互不相等且均不能围成三角形。
Input
第一行一个T(1≤T≤10),表示T组数据 接着T行,每行一个整数N(1≤N≤10^18)表示面包的长度
Output
输出可以分成的段数
Sample Input
1 6
Sample Output
3
Hint
可以分成三段,每段长度是1,2,3
Source
题解:斐波那契数列
#include <iostream> #include <stdio.h> using namespace std; int main() { int i; long long a[105]; a[1]=1,a[2]=2; for(i=3;i<=90;i++) a[i]=a[i-1]+a[i-2]; for(i=2;i<=90;i++) a[i]=a[i]+a[i-1]; long long n,t; scanf("%lld",&t); while(t--) { scanf("%lld",&n); // 是 互 不 相 等 不能出现两个1 永远也不能出现 不是2的时候不能出现 for(i=1;i<=90;i++) { if(a[i]>n) break; } cout<<i-1<<endl; } return 0; }