Problem Description
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≤20), which indicates the number of test cases.
For each test case, there is only one line describing the given integer n (1≤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.
考虑一下能保留的极端情况,假设有
a,b
两根棍子,那么只能保留长度不小于
a+b
的棍子(只向上考虑)。然后就只能保留
a+2b
的那一条……
也就是要使
a,b
尽量小,那么肯定是
1,2
两根,能保留的棍子数也就是斐波那契数列。
(这题的数据范围让它看起来不像这样做=w=)
#include<stdio.h>
int ans[21] = {0,0,0,0,1,1,2,3,3,4,5,6,7,7,8,9,10,11,12,13,14};
int main()
{
int t,n;
scanf("%d",&t);
for(int T=1;T<=t;T++) printf("Case #%d: %d\n",T,ans[scanf("%d",&n),n]);
}