zoukankan      html  css  js  c++  java
  • HDU5620 KK's Steel(C++语言版)

    问题链接HDU5620 KK's Steel

    问题描述参见上文。

    问题分析刚读到题,有点难解,没有头绪。

    看了暗示才明白点,有点像菲波拉契数列,不过每一项求的是数列到该项之和。另外略有不同的是,第1项是1,第2项是2。也许是为了三个钢管围起来不能成为三角形的原因。

    既然知道以上这些,那就先打表备查,这是为了节省计算时间,尽管有时候是多余的,但是多数程序都需要打表,那就打表吧。

    这个C++版的采用顺序查找,逻辑就要简单一些。参见:HDU5620 KK's Steel(C语言版)

    需要说明的一点是,菲波拉契序列的各项值增长是极快的,其和的增长就更快了,不用95项就达到了所需要的值的范围。这个项数计算,作为定义数组大小的依据,不能随便来的,需要事先做点功课的。

    程序说明(略)。

    AC的C++语言程序如下:

    /* HDU5620 KK's Steel */
    
    #include <iostream>
    
    using namespace std;
    
    const int MAXN = 100;
    unsigned long long fsum[MAXN];
    
    /* 递推法:计算斐波拉契数列的第1到n项之和 */
    /* 这里略有不同,第2项是2,其他基本相同 */
    void fibsum(unsigned long long fsum[], int n)
    {
        fsum[0] = 0;
        fsum[1] = 1;
        fsum[2] = 3;
        if(n <= 2)
            return;
    
        unsigned long long f1 = 1, f2 = 2, temp;
        int i;
        for(i=3; i<n; i++) {
            temp = f1 + f2;
            f1 = f2;
            f2 = temp;
    
            fsum[i] = fsum[i-1] + temp;
        }
    }
    
    int main()
    {
        // 计算斐波拉契数列的第1到n项之和,打表
        fibsum(fsum, MAXN);
    
        int t;
        long long n;
    
        cin >> t;
        while(t--) {
            cin >> n;
            for(int i=1; i<MAXN; i++)
                if(n < fsum[i]) {
                    cout << i-1 << endl;
                    break;
                }
        }
    
        return 0;
    }


    
  • 相关阅读:
    微信小程序 生命周期
    ftp uploadFileAction(重要)
    java FTP 上传下载删除文件
    httpsession
    db2 blob EMPTY_BLOB()
    java blob
    java session getCreationTime()
    eclipse 查看源代码
    java file类
    Vue.js 和 MVVM 小细节
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564865.html
Copyright © 2011-2022 走看看