zoukankan      html  css  js  c++  java
  • HDU ACM Fibonacci

    Problem Description

    Fibonacci numbers are well-known as follow:

     

    Now given an integer N, please find out whether N can be represented as the sum of several Fibonacci numbers in such a way that the sum does not include any two consecutive Fibonacci numbers.

    Input

    Multiple test cases, the first line is an integer T (T<=10000), indicating the number of test cases.

    Each test case is a line with an integer N (1<=N<=109).

    Output

    One line per case. If the answer don’t exist, output “-1” (without quotes). Otherwise, your answer should be formatted as “N=f1+f2+…+fn”. N indicates the given number and f1, f2, … , fn indicating the Fibonacci numbers in ascending order. If there are multiple ways, you can output any of them.

    Sample Input

    4
    5
    6
    7
    100

    Sample Output

    5=5
    6=1+5
    7=2+5
    100=3+8+89

    题解:贪心求解,此题需要注意的是相邻的两个数不能选择;
    #include<string.h>
    #include<stdio.h>
    #include<math.h>
    using namespace std;
    long long int arr[10001]={0,1,2};
    int main()
    {
    
        long long int i,j,a,b[123],k,m,l,kk;
        for(i=3;i<=90;i++)
            arr[i]=arr[i-1]+arr[i-2];//先打下表
            long long int count=0;
            while(scanf("%lld",&m)!=-1)
            {
            for(kk=0;kk<m;kk++){
                scanf("%lld",&a);
            k=0;
            l=0;count=0;int pp=0;
            for(i=90;i>=1;i-=2)
            {
                pp=0;
                count+=arr[i];
                if(count>a)
                {
                    count-=arr[i];
                    pp=1;
                }
                else if(count==a)
                {
                    k=1;
                    b[l++]=arr[i];
                    break;
                }
                else if(count<a)
                    b[l++]=arr[i];
                if(pp==1)
                     i++;//判断一下上一个数是否选择,若没选,下一个数可以选择
            }
            if(k==1)
            {
            printf("%d=",a);
            for(i=l-1;i>=0;i--)
            {
    
                if(i==0)
                    printf("%lld
    ",b[i]);
                else
                    printf("%lld+",b[i]);
            }
            }
            else
                printf("-1
    ");
            }
            }
            return 0;
    }
  • 相关阅读:
    cookie+session,会话时间设定
    input中id和name属性的区别。
    框架和设计模式的区别
    Java数字格式化输出时前面补0
    DDL_数据库模式定义语言
    7.JAVA_SE复习(文件)
    (python)数据结构---集合
    (python)数据结构---字典
    (python)数据结构---字符串
    (python)排序算法
  • 原文地址:https://www.cnblogs.com/moomcake/p/8627634.html
Copyright © 2011-2022 走看看