当前位置: 首页 > news >正文

HDU5620 KK's Steel(C语言版)

问题链接:HDU5620 KK's Steel。

问题描述参见上文。

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

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

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

查找的时候,可以用顺序查找的,只是略费点时间。这里采用二分查找,逻辑就稍微有点麻烦了,因为这不是找相等的数,是找一个小于或等于的数,所以要注意在二分查找之后加以调整。参见:HDU5620 KK's Steel(C++语言版)。

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

程序说明(略)。

AC的C语言程序如下:

#include <stdio.h>

#define MAXN 95
unsigned long long fsum[MAXN+1];

/* 递推法:计算斐波拉契数列的第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(void)
{
    // 计算斐波拉契数列的第1到n项之和,打表
    fibsum(fsum, MAXN);

    int t, start, mid, end;
    unsigned long long n;

    scanf("%d",&t);
    while(t--) {
        scanf("%llu",&n);

        // 二分查找
        start = 0;
        end = MAXN;
        for(;;) {
            if(start > end)
                break;
            mid = (start + end) / 2;
            if(fsum[mid] < n)
                start = mid + 1;
            else if(fsum[mid] > n)
                end = mid - 1;
            else if(fsum[mid] == n)
                break;
        }
        if(n < fsum[mid])
            mid--;

        printf("%llu\n", mid);
    }

    return 0;
}






转载于:https://www.cnblogs.com/tigerisland/p/7564868.html

相关文章:

  • 如何取消系统关机
  • 自动获取IP,然后设置为静态IP
  • ugui中随机更换图片的方法:一
  • 随屏幕滚动的带缓冲效果的右下角广告
  • HTML5上传文件显示进度
  • NSDate-日期类nbsp;OC——第七天(1)
  • UIController子类控件nbsp;UI_06
  • 编程珠玑--旋转算法
  • 基本排序算法二
  • HDU - 1455 Sticks(深搜+剪枝)
  • perl 递归两例
  • Tomcat学习总结(3)——Tomcat优化详细教程
  • memchached你知道和不知道的事
  • PHP教程,Linux教程光盘
  • C++走向远洋——51(数组类运算的实现)
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • CSS3 变换
  • hadoop集群管理系统搭建规划说明
  • Java Agent 学习笔记
  • JS实现简单的MVC模式开发小游戏
  • Laravel 菜鸟晋级之路
  • Mysql5.6主从复制
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • Python利用正则抓取网页内容保存到本地
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • Vim 折腾记
  • Vue小说阅读器(仿追书神器)
  • Webpack 4x 之路 ( 四 )
  • XML已死 ?
  • Zsh 开发指南(第十四篇 文件读写)
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 技术胖1-4季视频复习— (看视频笔记)
  • 日剧·日综资源集合(建议收藏)
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • Hibernate主键生成策略及选择
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (bean配置类的注解开发)学习Spring的第十三天
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (ZT)出版业改革:该死的死,该生的生
  • (zt)最盛行的警世狂言(爆笑)
  • (第一天)包装对象、作用域、创建对象
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (论文阅读40-45)图像描述1
  • (十六)串口UART
  • (转)C#调用WebService 基础
  • (转)http-server应用
  • .NET 8.0 发布到 IIS
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .Net 高效开发之不可错过的实用工具