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]);
}
本文介绍了一道关于如何最少次数地移除棍子以阻止形成三角形的问题,并给出了解决方案。通过分析发现,保留棍子的数量符合斐波那契数列规律。
428

被折叠的 条评论
为什么被折叠?



