Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1057 Accepted Submission(s): 656
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
Sample Output
Case #1: 1
Case #2: 1
Case #3: 2
//题意, n 个数, 1-n 现要使任意三个数作为三角形三条边都不能成功,问至少需要删除几个数
//认真的模拟算了算,发现就是斐波那契数列。。。能保留下来的数是 1,2,3,5,8,13,21 ... ...
干脆打表过
#include <iostream> #include <cstdio> using namespace std; int cnt, x, cas; int ans[25]={0,0,0,0,1,1,2,3,3,4,5, 6,7,7,8,9,10,11,12,13,14}; int main() { scanf("%d", &cas); for(int i=1;i<=cas;i++){ scanf("%d", &x); printf("Case #%d: %d ", i, ans[x]); } return 0; }