K阶斐波那契数列--------西工大NOJ习题.10

2023-11-05

K阶斐波那契数列--------西工大NOJ习题.10

原创不易,转载请说明出处!!!

科普:k阶斐波那契数列的0到n-1项需要有初始值。

其中,0到n-2项初始化为0,第n-1项初始化为1.

在这道题目中,所引用的函数详见:数据结构实现——循环队列

(我的一篇博文)

我使用的方法是尺取法,这样可以大大地减小时间复杂度。

具体见代码:

#include <stdio.h>
#include <stdlib.h>
typedef int Elem;
typedef struct Queue
{
    Elem *data;
    int head;
    int tail;
    int size;//仅仅是一个功能,程序的判空,判断满并不依赖。
    int MAX_SIZE;//是真正申请的最大值,实际存放MAX_SIZE-1个。
}Queue;
//函数原形声明
Queue *Creat(int max);
int Size(Queue* Q);
Elem GetTail(Queue *Q);
Elem GetHead(Queue *Q);
int Pop(Queue *Q);
int Push(Queue *Q, Elem e);
int Full(Queue* Q);
int Empty(Queue *Q);
int Destroy(Queue* Q);



Queue *Creat(int max)
{
    if(max <= 0)
        return NULL;
    Elem *D = (Elem*)calloc(max + 1, sizeof(Elem));
    if(!D)
        return NULL;
    Queue *Q = (Queue*)malloc(sizeof(Queue));
    if(!Q)
    {
        free(D);
        return NULL;
    }
    Q->MAX_SIZE = max + 1;
    Q->data = D;
    Q->head = 0;
    Q->tail = 0;
    Q->size = 0;
    return Q;
}

int Destroy(Queue* Q)
{
    if(!Q)
        return 0;
    free(Q->data);
    free(Q);
    return 1;
}
int Empty(Queue *Q)
{
    if(Q->head == Q->tail)
        return 1;
    else
        return 0;
}
int Full(Queue* Q)
{
    if((Q->tail+1)%Q->MAX_SIZE == Q->head)
        return 1;
    else
        return 0;
}

int Push(Queue *Q, Elem e)
{
    if(Full(Q))
       return 0;
    Q->data[Q->tail] = e;
    Q->tail = (Q->tail + 1)%Q->MAX_SIZE;
    Q->size += 1;
    return 1;
}

int Pop(Queue *Q)
{
    if(Empty(Q))
        return 0;
    Q->head = (Q->head + 1) % Q->MAX_SIZE;
    Q->size -= 1;
    return 1;
}

Elem GetHead(Queue *Q)
{
    if(Empty(Q))
    {
        *(int *)NULL;//专门让程序crash
    }
    return Q->data[Q->head];
}
Elem GetTail(Queue *Q)
{
    if(Empty(Q))
    {
        *(int *)NULL;//专门让程序crash
    }
    int t;
    t = Q->tail;
    t -= 1;
    if(t >= 0)
        return Q->data[t];
    else
    {
        return Q->data[Q->MAX_SIZE-1];
    }
}
int Size(Queue* Q)
{
    return Q->size;
}

int main()
{
    int max, n;
    scanf("%d%d",&max, &n);
    int sum = 0;//使用尺取法
    Queue* Q = Creat(n);//指定大小为n.
    for(int i = 1; i <= n; i++)//先在队列中塞下前n项
    {
        if(i < n)
            Push(Q,0);
        else
            Push(Q,1);
    }
    sum = 1;//初始化n项的和
    while(sum<=max)//当要增加的小于等于最大值时,继续算.
    {
        int tmp = sum;//前一时刻的sum和
        sum -= GetHead(Q);
        Pop(Q);
        sum += tmp;//更新sum,为下一次做准备
        Push(Q,tmp);
    }
    for(int i = 1; i <= n; i++)//依次输出
    {
        printf("%d ",GetHead(Q));
        Pop(Q);
    }
    Destroy(Q);//销毁循环队列.
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

K阶斐波那契数列--------西工大NOJ习题.10 的相关文章

  • MongoDB C# 驱动程序检查身份验证状态和角色

    这是我使用 MongoDB 身份验证机制登录 MongoDB 的代码 try var credential MongoCredential CreateMongoCRCredential test admin 123456 var sett
  • C#中如何检测字符串是否为货币

    通常当我需要转换时currency string 如 1200 55 z 或 1 249 到十进制值我这样做 if currencyString Contains z decimal value Decimal Parse dataToCh
  • 如何知道并加载特定文件夹中的所有图像?

    我有一个应用程序 C Builder 6 0 需要知道特定文件夹中的图像总数 然后我必须加载它们 在 ImageList 或 ComboBoxEx 中 或任何其他控件中 我怎样才能做到这一点 我知道如何在控件中加载图像 或保存在 TList
  • 如何向 UWP 项目添加 .NET dll 引用?

    我有几个适用于 NETv4 x 的 NET dll 项目 我将版本更改为 4 6 1 并重新构建 没有出现问题 当我尝试从 UWP 项目向它们添加引用时 出现错误 项目的目标是 NETCore 而文件引用的目标是 NET框架 这不是受支持的
  • 使用 C# 使用应用程序密码登录 Office 365 SMTP

    在我们的 Office 365 公司帐户中实施两步身份验证之前 我的 C WPF 程序已成功进行身份验证并发送邮件 我使用了 SmtpClient 库 但现在我必须找到另一个解决方案 因为它不再起作用 我找不到任何使用 O365 应用程序密
  • 阅读 Stack Overflow RSS 源

    我正在尝试获取未回答问题的列表the feed https stackoverflow com feeds 但我在阅读时遇到困难 const string RECENT QUESTIONS https stackoverflow com f
  • Qt中正确的线程方式

    我的图像加载非常耗时 图像很大 并且在加载时也完成了一些操作 我不想阻止应用程序 GUI 我的想法是在另一个线程中加载图像 发出图像已加载的信号 然后用该图像重绘视图 我的做法 void Window loadImage ImageLoad
  • glDrawElements 只绘制半个四边形

    这是我的功能 void Object draw2 if mIsInitialised return Tell OpenGL about our vertex and normal data glEnableClientState GL VE
  • 捕获当前正在播放的声音

    是否可以捕获计算机上当前播放的声音 如果能够将其保存为 mp3 就好了 但我认为这样做会存在一些法律问题 所以 wav 也可以 我环顾四周 有人建议使用虚拟音频线之类的东西 在 C 中捕获声音输出 https stackoverflow c
  • 当格式字符串包含“{”时,String.Format 异常

    我正在使用 VSTS 2008 C Net 2 0 执行以下语句时 String Format 语句抛出 FormatException 有什么想法是错误的吗 这是获取我正在使用的 template html 的位置 我想在 templat
  • 在生产者-消费者情况下使用条件变量

    我正在尝试了解条件变量以及如何在生产者 消费者情况下使用它 我有一个队列 其中一个线程将数字推入队列 而另一个线程从队列中弹出数字 当生产线程放置一些数据时 我想使用条件变量向消费线程发出信号 问题是有时 或大多数时候 它只将最多两个项目推
  • 为什么以下代码不允许我使用 fgets 获取用户输入但可以使用 scanf?

    这是一个更大程序的简短摘录 但该程序的其余部分无关紧要 因为我认为我能够隔离该问题 我怀疑这与我使用 fgets 的方式有关 我读过 最好使用 fgets 而不是 scanf 但我似乎无法让它在这里正常工作 当我使用以下代码时 程序不会给我
  • 在可观察项目生成时对其进行处理

    我有一个IObservable它会生成一次性物品 并且在其生命周期内可能会生成无限数量的物品 因此 我想在每次生成新项目时处理最后一个项目 因此Using http reactivex io documentation operators
  • 使用 AutoMapper 进行 LINQ GroupBy 聚合

    试图让查询工作 但老实说不确定如何 或者是否可能 进行它 因为我尝试过的一切都不起作用 共查询6个表 Person PersonVote PersonCategory Category City FirstAdminDivision Per
  • 如何使用 Clang 查找内存泄漏

    我在我的机器 ubuntu 中安装了 Clang 以便发现我的 C 代码中的内存泄漏 我编写了一个示例代码来检查它的工作情况 如下所示 File hello c for leak detection include
  • 编写专门用于类及其子类的函数模板

    我正在尝试编写一个函数模板 一个版本应该用于不满足另一版本标准的所有类型 当参数是给定类的基类或该类本身时 应使用另一个版本 我尝试过超载Base 但是当类派生自Base 他们使用通用的 而不是特定的 我也尝试过这种 SFINAE 方法 s
  • 改进C++逐行读取文件的能力?

    我正在解析大约 500GB 的日志文件 我的 C 版本需要 3 5 分钟 我的 Go 版本需要 1 2 分钟 我正在使用 C 的流来流式传输文件的每一行以进行解析 include
  • 局部静态变量初始化是线程安全的[重复]

    这个问题在这里已经有答案了 假设我有一个包含三个静态函数的类 如下所示 include
  • 如何使复选框不可选择?

    我想知道你是怎么做的CheckBox在c 中无法选择 我认为这会是类似 SetSelectable false 之类的东西 但我似乎看不到该方法 I found CanSelect但这似乎是只读属性 您可以设置自动检查 http msdn
  • 如何仅更改 DateTime 的日期部分,同时保留时间部分?

    我在代码中使用了很多 DateTime 我想将这些日期时间更改为我的特定日期并保留 时间 1 2012 02 02 06 00 00 gt 2015 12 12 06 00 00 2 2013 02 02 12 00 00 gt 2015

随机推荐

  • 使用机器学习做DGA域名识别

    DGA域名 域名生成算法 Domain Generation Algorithm DGA 是一项古老但一直活跃的技术 是中心结构僵尸网络赖以生存的关键武器 该技术给打击和关闭该类型僵尸网络造成了不小的麻烦 研究人员需要快速掌握域名生成算法和
  • CountDownLatch 用法和详解

    CountDownLatch 是多线程控制的一种工具 它被称为 门阀 计数器或者 闭锁 这个工具经常用来用来协调多个线程之间的同步 或者说起到线程之间的通信 而不是用作互斥的作用 下面我们就来一起认识一下 CountDownLatch 认识
  • 深度学习------不同方法实现Inception-10

    本博客通过tensorflow实现inception10模型 对于inception10模型有不同的写法 包括 sequence模型 类封装 自定义函数 而本博客主要通过自定义函数和类封装实现inception10 代码和模块图如下 inc
  • 基于echarts 做的男女比例

    data数据 maleToFemaleRatio FemaleNumber 28417 FemaleRadio 45 17 MaleNumber 34491 MaleRadio 54 83 完整代码 var myChart echarts
  • 面试题 04.02. 最小高度树

    面试题 04 02 最小高度树 给定一个有序整数数组 元素各不相同且按升序排列 编写一个算法 创建一棵高度最小的二叉搜索树 示例 给定有序数组 10 3 0 5 9 一个可能的答案是 0 3 9 10 null 5 它可以表示下面这个高度平
  • 在ch32v307单片机上移植LUA

    下载lua源代码 先到官网下载lua源代码 http www lua org 然后解压出源码 源码移植 这里基于官方例程中的串口例程进行移植 USART Printf例程 使用MounRiver Studio该工程 然后添加lua源码 需要
  • 说说对 Node 中的 Buffer 的理解?应用场景?

    一 是什么 在Node应用中 需要处理网络协议 操作数据库 处理图片 接收上传文件等 在网络流和文件的操作中 要处理大量二进制数据 而Buffer就是在内存中开辟一片区域 初次初始化为8KB 用来存放二进制数据 在上述操作中都会存在数据流动
  • Android Studio 安装 SDK 失败

    https blog csdn net zdw wym article details 74942772 utm source tuicool utm medium referral
  • 计算机端口详解

    计算机端口详解 一 摘要 端口是个网络应用中很重要的东西 相当于 门 了 二 什么是端口 在 Internet上 各主机间通过TCP TP协议发送和接收数据报 各个数据报根据其目的主机的ip地址来进行互联网络中的路由选择 可见 把数据报顺
  • 【C语言】如何只打印小数的有效数字位数且不补0

    我们时常会碰到使用printf打印小数但只想显示该小数有有效数字的小数位数 这时使用float或者double类型打印时往往会出现以下情况 但是如果我们不想打印39 5之后的小数 那么就需要将c语言中printf语句中的 f 表示十进制浮点
  • pipreqs——快捷生成一个Python项目的依赖模块requirements.txt

    依赖模块文件快捷生成requirements txt 解决代码复用过程中 低效环境配置的问题 使用步骤 1 安装pipreqs pip install i https pypi tuna tsinghua edu cn simple pip
  • Tomcat的优化

    Tomcat作为一款常用的web容器 对其进行优化是提升性能的重要手段 对其进行优化可以从以下方面入手 调整内存 调整线程池 Executor 调整连接器 Connector 调整运行模式 调整内存 如果内存设置过小 极有可能导致项目无法启
  • 头条移动端项目Day07 —— app端文章搜索

    作者主页 欢迎来到我的技术博客 个人介绍 大家好 本人热衷于Java后端开发 欢迎来交流学习哦 如果文章对您有帮助 记得关注 点赞 收藏 评论 您的支持将是我创作的动力 让我们一起加油进步吧 文章目录 app端文章搜索 1 本章内容介绍 1
  • 通过图数据库 Neo4J 建立疫情行动轨迹及接触关系图

    最近疫情反复 我被为拜托建一张 某某行动轨迹及接触关系图 这类行动轨迹或接触关系 可以抽象成网或者图 从这类图结构立刻就会联想到图数据库Neo4J 正好并没有在公司电脑上安装和使用过Neo4J 于是在这里简单记录下 整个过程还是非常简单的
  • 硅谷撑不住了?200多家美国科技公司裁员1.8万人

    点击上方 AI遇见机器学习 选择 星标 公众号 重磅干货 第一时间送达 疫情之下 硅谷巨头们快撑不住了 据Layoffs fyi称 自3月初以来 美国科技公司迎来多次大规模的裁员 自新冠病毒在欧美肆虐以来 Layoffs fyi一直在追踪初
  • windows下游戏服务器端框架Firefly安装说明及demo运行

    本来公司一个网游服务器端选定了pomelo框架 后来出了个Firefly 为做一个对比 决定研究一下Firefly 看了一下Firefly 感觉头大 python的 本人python小白 只好慢慢折腾 一天下来总算装上了Firefly框架
  • android:layout_weight的真实含义

    首先声明只有在Linearlayout中 该属性才有效 之所以android layout weight会引起争议 是因为在设置该属性的同时 设置android layout width为wrap content和match parent会
  • SimSwap代码精析对应论文Pipeline【Identity Extractor以及loss的计算,Encoder,ID Injection Module,Decoder】

    SimSwap代码精析对应论文Pipeline Identity Extractor以及loss id的计算 Encoder ID Injection Module Decoder 0 前言 1 先看Inference的Pipeline I
  • leetcode 14-最长公共前缀 python

    编写一个函数来查找字符串数组中的最长公共前缀 如果不存在公共前缀 返回空字符串 示例 1 输入 flower flow flight 输出 fl 示例 2 输入 dog racecar car 输出 解释 输入不存在公共前缀 可以使用enu
  • K阶斐波那契数列--------西工大NOJ习题.10

    K阶斐波那契数列 西工大NOJ习题 10 原创不易 转载请说明出处 科普 k阶斐波那契数列的0到n 1项需要有初始值 其中 0到n 2项初始化为0 第n 1项初始化为1 在这道题目中 所引用的函数详见 数据结构实现 循环队列 我的一篇博文