Triangle
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 529 Accepted Submission(s): 345
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.
Sample Input
3
4
5
6
Sample Output
Case #1: 1
Case #2: 1
Case #3: 2
题目大意
有n根长度为1~N的两两不同长度的木棍,若要使其任意三根组合不能构成三角形,求最少需要取走的木棍的数量。
按照斐波那契数列进行筛选,凡不属于斐波那契数的都剔除
#include<stdio.h>
int main()
{
int T, i, j, n, s[6]={1, 2, 3, 5, 8, 13};
scanf("%d", &T);
for (i=0; i<T; i++) {
scanf("%d", &n);
for (j=0; j<6; j++) {
if (n<s[j]) {
break;
}
}
printf("Case #%d: %d\n", i+1, n-j);
}
return 0;
}