题目地址:点击打开链接
思路:要减去最少的让它不能构成三角形,可知构成三角形的条件是a+b>c,不符合的极限
条件a+b=c,所以可以想到留下斐波那契数,这样就能拿最小的让它不满足构成三角形的条
件。
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 25;
int fib[maxn] = {0, 1}, sum[maxn];
void init()
{
for(int i = 2; ; i++)
{
fib[i] = fib[i-1]+fib[i-2];
if(fib[i] > 20) break;
sum[fib[i]] = 1;
}
for(int i = 1; i < maxn; i++)
sum[i] += sum[i-1];
}
int main(void)
{
int n, t, ca = 1;
init();
cin >> t;
while(t--)
{
scanf("%d", &n);
printf("Case #%d: %d\n", ca++, n-sum[n]);
}
return 0;
}
Triangle
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 821 Accepted Submission(s): 532
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
Source
Recommend