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.
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 ).
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.
Sample Input
3 4 5 6
Sample Output
Case #1: 1 Case #2: 1 Case #3: 2
贪心。可以发现剩下的数是1 2 3 5 8 13这样的fib数列的时候取走的最少
直接用n减去不大于n的fib数列元素个数即可
#include<cstdio>
using namespace std;
int main()
{
int T,k=0;
scanf("%d",&T);
while(T>0)
{
T--;
k++;
int n;
scanf("%d",&n);
int ans=n;
if(n==1||n==2||n==3)
ans=0;
else
{
int a1=1,a2=2;
ans=2;
while(a1+a2<=n)
{
int t=a1+a2;
a1=a2;
a2=t;
ans++;
}
ans=n-ans;
}
printf("Case #%d: %d\n",k,ans);
}
return 0;
}