HDU - 5914 A - Triangle

Triangle

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1171    Accepted Submission(s): 701


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 ( T20), which indicates the number of test cases.

For each test case, there is only one line describing the given integer n ( 1n20).
 

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.2.3.4.5......n.问最从中最少去掉几根木棒就能使得剩下的木棒不能组成三角形
思路:本题是一个斐波那契数列,另外,本题最多只有20根木条,可也直接用打表法
#include
#include
#include
using namespace std;
int a[30]={0,0,0,0,1,1,2,3,3,4,5,6,7,7,8,9,10,11,12,13,14,15};
int main()
{
    int n;
    while(cin>>n)
    {
        for(int i=1;i<=n;i++)
        {
            int n;
            cin>>n;
            printf("Case #%d: ",i);
            cout<
用斐波那契数列求解(赛后参考的大神的,自己当时没想到……)
#include  
#include  
using namespace std;  
int f[50];  
void init()  
{  
    f[1]=1;  
    f[2]=2;  
    for(int i=3;i<=20;i++)  
    {  
        f[i]=f[i-1]+f[i-2];  
    }  
}  
int main()  
{  
    int t;  
    int kase=0;  
    init();  
    scanf("%d",&t);  
    while(t--)  
    {  
        int n;  
        scanf("%d",&n);  
        int tmp=0;  
        for(int i=1;i<=20;i++)  
        {  
            if(f[i]<=n)tmp++;  
        }  
        printf("Case #%d: ",++kase);  
        printf("%d\n",n-tmp);  
    }  
}  



你可能感兴趣的:(选拔赛,暑假集训,hdu)