Mr. Frog has n sticks, whose lengths are 1,2, 3⋯⋯n respectively. Wallice is a bad man, so he does not want Mr. Frog to form a triangle with three of the sticks here. He decides to steal some sticks! Output the minimal number of sticks he should steal so that Mr. Frog cannot form a triangle with
any three of the remaining sticks.
Input
The first line contains only one integer T (T≤20T≤20), which indicates the number of test cases.
For each test case, there is only one line describing the given integer n (1≤n≤201≤n≤20).
Output
For each test case, output one line “Case #x: y”, where x is the case number (starting from 1), y is the minimal number of sticks Wallice should steal.
Sample Input
3
4
5
6
Sample Output
Case #1: 1
Case #2: 1
Case #3: 2
该题是求至少拿掉几根木棍使剩下的任意三根木棍不能组成三角形
所以此时可以运用斐波那契数列,1,2,3,5,8,13,21,34.。。。。。因为斐波那契数列中任意三项都不能构成一个三角形,反向思考,求至少拿掉几根木棍,我们可以求一组木棍数中有几根是斐波那契数,用总的木棍减去就可以得到应该拿走几根。
代码如下:
#include<cstdio>
#include<iostream>
using namespace std;
int f[20];
void fib()
{
f[1]=1;
f[2]=2;
for(int i=3;i<=20;i++)
f[i]=f[i-1]+f[i-2];
}
int main()
{
int n;
int ans,t=1;
cin>>n;
while(n--)
{
ans=0;
int m;
cin>>m;
fib();
for(int i=1;i<=m;i++)
{
if(f[i]<=m)
ans++;
}
cout<<"Case #"<<t++<<": " ;
cout<<m-ans<<endl;
}
return 0;
}