循环-小蜜蜂-斐波那契数列-大数加法

hdoj2044 一只小蜜蜂 以及如何让水题不水 这个话题的起因是这样的: 阅读详情

【题】

小蜜蜂(选作)


一只小蜜蜂在如下图所示的蜂窝上爬行。它爬行时,只能从一个格爬到相邻的大号格子中。例如,从 1 号格子可以爬到 2 号或者 3 号格子,从 2 号则可以爬到 3 号或者 4 号格子。

 

    请问从一个格子 a 爬到一个格子 b 一共有多少种可行的路线。

输入:

    分别是起始点 a 和终止点 b 的编号。( a 和 b 在 1~100 之间,且 a<b 。)

输出:

    方案数量。

  测试输入关于“测试输入”的帮助 期待的输出关于“期待的输出”的帮助 时间限制关于“时间限制”的帮助 内存限制关于“内存限制”的帮助 额外进程关于“{$a} 个额外进程”的帮助
测试用例 1 以文本方式显示
  1. 1 4↵
以文本方式显示
  1. 3↵
1秒 64M 0
测试用例 2 以文本方式显示
  1. 1 5↵
以文本方式显示
  1. 5↵
1秒 64M 0
测试用例 3 以文本方式显示
  1. 1 50↵
以文本方式显示
  1. 12586269025↵
1秒 64M 0
测试用例 4 以文本方式显示
  1. 2 50↵
以文本方式显示
  1. 7778742049↵
1秒 64M 0
测试用例 7 以文本方式显示
  1. 1 100↵
以文本方式显示
  1. 354224848179261915075↵
1秒 64M 0

【分析】
        分析可知,这是一个斐波那契数列。需要注意的是,C语言中所有的类型都不能表示题中的数值,需要用到大数加法。

【代码】
    (1)先给出斐波那契数列的求法:
#include "stdio.h"

int main()
{
	int a, b;
	scanf("%d %d", &a, &b);
	getchar();

	int count = b - a;
	int i, x1 = 0, x2 = 1, y;
	//斐波那契数列
	for(i = 1; i <= count; i++)
	{
		y = x1 + x2;
		x1 = x2;
		x2 = y;
	}
	printf("%d\n", y);
    return 0; 
}

    (2)大数加法
           
         
#include "stdio.h"
#include "stdlib.h"

#define N 22				//22位能表示第100个以内的斐波那契数列值

char * Add(char * x1, char * x2);
void Output(char * y);

int main()
{
	int i;

	//y = x1 + x2;
	char * x1 = (char *)malloc(sizeof(char) * N);
	char * x2 = (char *)malloc(sizeof(char) * N);
	char * y = (char *)malloc(sizeof(char) * N);

	//初始化y, x1, x2
	for (i = 0; i < N; i++)
	{
		x1[i] = '\0';
		x2[i] = '\0';
		y[i] = '\0';
	}

	//给x1和x2赋初值
	//x1 = 1256
	//x2 = 567
	x1[0] = '6';	x1[1] = '5';	x1[2] = '2';	x1[3] = '1';
	x2[0] = '7';	x2[1] = '6';	x2[2] = '5';	


	y = Add(x1, x2);

	//输出
	Output(x1);
	printf(" + ");
	Output(x2);
	printf(" = ");
	Output(y);

	printf("\n");
    return 0; 
}

//大数加法函数
char * Add(char * x1, char * x2)
{
 	char * y = (char *) malloc(sizeof(char *) * N);
	int i = 0;
	int t = 0;				//表示进位

	//实现大数加法,数组前面存的是数值的高位。如123在数组中是{'3','2','1','\0'}
	//处理相同长度的部分
	while(x1[i] != '\0' && x2[i] != '\0')
	{
		y[i] = (x1[i] - '0' + x2[i] - '0' + t) % 10 + '0';
		t = (x1[i] - '0' + x2[i] - '0' + t) / 10;
		i++;
	}
	//如果x1比x2长
	while(x1[i] != '\0')
	{
		y[i] = (x1[i] - '0' + t) % 10 + '0';
		t = (x1[i] - '0' + t) / 10;
		i++;
	}
	//如果x2比x1长
	while(x2[i] != '\0')
	{
		y[i] = (x2[i] - '0' + t) % 10 + '0';
		t = (x2[i] - '0' + t) / 10;
		i++;
	}
	//如果还有进位
	if (t == 1)
	{
		y[i++] = '1';
	}
	y[i] = '\0';
 	return y;
}

//输出
void Output(char * y)
{	
	//先找到\0的位置,然后逆序输出
	int i = 0;
	while(y[i] != '\0')
	{
		i++;
	}
	i--;
	while(i >= 0)
	{
		printf("%d", y[i--] - '0');
	}
}


    (3)斐波那契数列 + 大数加法

#include "stdio.h"
#include "stdlib.h"

#define N 22				//22位能表示第100个以内的斐波那契数列值

char * Add(char * x1, char * x2);
void Output(char * y);

int main()
{
	int a = 1, b = 100;

	scanf("%d %d", &a, &b);
	getchar();
	
	int count = b - a;
	int i;

	//y = x1 + x2;
	char * x1 = (char *)malloc(sizeof(char) * N);
	char * x2 = (char *)malloc(sizeof(char) * N);
	char * y = (char *)malloc(sizeof(char) * N);

	//初始化y, x1, x2
	for (i = 0; i < N; i++)
	{
		x1[i] = '\0';
		x2[i] = '\0';
		y[i] = '\0';
	}

	//给x1和x2赋初值
	x1[0] = '0';	x1[1] = '\0';
	x2[0] = '1';	x2[1] = '\0';

	//斐波那契数列,叠加
	for(i = 1; i <= count; i++)
	{
		y = Add(x1, x2);
		x1 = x2;
		x2 = y;
	}
	
	//输出结果
	Output(y);
	printf("\n");
    return 0; 
}

//大数加法函数
char * Add(char * x1, char * x2)
{
	char * y = (char *) malloc(sizeof(char *) * N);
	int i = 0;
	int t = 0;				//表示进位

	//实现大数加法,数组前面存的是数值的高位。如123在数组中是{'3','2','1','\0'}
	//处理相同长度的部分
	while(x1[i] != '\0' && x2[i] != '\0')
	{
		y[i] = (x1[i] - '0' + x2[i] - '0' + t) % 10 + '0';
		t = (x1[i] - '0' + x2[i] - '0' + t) / 10;
		i++;
	}
	//如果x1比x2长
	while(x1[i] != '\0')
	{
		y[i] = (x1[i] - '0' + t) % 10 + '0';
		t = (x1[i] - '0' + t) / 10;
		i++;
	}
	//如果x2比x1长
	while(x2[i] != '\0')
	{
		y[i] = (x2[i] - '0' + t) % 10 + '0';
		t = (x2[i] - '0' + t) / 10;
		i++;
	}
	//如果还有进位
	if (t == 1)
	{
		y[i++] = '1';
	}
	y[i] = '\0';
	return y;
}

//输出
void Output(char * y)
{	
	//先找到\0的位置,然后逆序输出
	int i = 0;
	while(y[i] != '\0')
	{
		i++;
	}
	i--;
	while(i >= 0)
	{
		printf("%d", y[i--] - '0');
	}
}




北理乐学 C语言 编程题源代码 里面的每一个txt都包含若干个程序源代码。按照题号分门别类放置。 总计起来一共有近90道编程题的源代码。 分享出来希望能解除您在编程路上遇到的一些困惑,并学有所得。 立即下载

相关推荐

Power BI应用案例:淘宝用户行为分析实战

一、案例背景 基于千万级的淘宝用户的使用记录,对淘宝用户的行为进行分析,具体指标包括:日PV、日UV、小时PV、小时UV、不同用户行为的PV、用户购买次数分布、用户购买频次分布、活跃用户消费情况等。通过本案例,可以基本看看Power BI都能分析达到怎么样的效果。 二、数据来源及结构 阿里天池官方发布的1万用户在2014年双十二期间的行为记录,数据量达1200万+。 数据下载地址:...

灰哥数据智能的专栏 1万+

【C】北理C语言——曾困扰我很久的题目系列第2题

一只小蜜蜂在如下图所示的蜂窝上爬行。它爬行时,只能从一个格爬到相邻的大号格子中。例如,从 1 号格子可以爬到 2 号或者 3 号格子,从 2 号则可以爬到 3 号或者 4 号格子。 请问从一个格子 a 爬到一个格子 b 一共有多少种可行的路线。 输入: 分别是起始点 a 和终止点 b 的编号。( a 和 b 在 1~100 之间,且 a<b 。) 输出: 方案数量。 解题思路: 看到这道题,首先应该想到的是用——递归。(与斐波那契数列对...

Wangzd398的博客 2880

【深度排查】VScode 远程 SSH 连接失败:从网络握手到服务部署的全链路诊断指南

本文详细解析了VScode远程SSH连接失败的常见原因及解决方案,从基础网络排查到SSH服务配置,再到VScode特有的问题处理。特别针对Ubuntu和TrueNAS系统提供了具体配置建议,帮助开发者快速解决'Could not establish connection'等连接问题,提升远程开发效率。

weixin_30301449的博客 446

小蜜蜂(裴波那契的应用)

一只小蜜蜂在如下图所示的蜂窝上爬行。它爬行时,只能从一个格爬到相邻的大号格子中。例如,从 1 号格子可以爬到 2 号或者 3 号格子,从 2 号则可以爬到 3 号或者 4 号格子。正在上传…重新上传取消请问从一个格子 a 爬到一个格子 b 一共有多少种可行的路线。

bit_butterfly的博客 893

【Python】秋招机考 —— 2025/8/27 华为 AI 方向

2025 华为 AI 秋招机考题目包含15道单选题、5道多选题和2道机器学习编程题,涵盖核心算法与数学知识。单选题考察了Softmax激活、Transformer位置编码、Jacobi迭代、大模型幻觉现象、特征向量、K-means聚类、矩阵秩、实对称矩阵性质、SVD分解、概率论等知识点。多选题涉及高斯-赛德尔迭代和朴素贝叶斯分类器。

一杯水果茶!足矣~ 837

从养虾到退坑:OpenClaw 卸载不留残留,一步到位

文章摘要: 本文提供OpenClaw软件的完整卸载指南,适用于Windows、macOS和Linux系统。内容包含卸载前的数据备份步骤(配置文件、日志、插件列表),以及详细的卸载脚本。Windows版通过批处理文件删除程序文件、注册表项和环境变量;macOS/Linux版则提供shell脚本,涵盖服务停止、软件包卸载、配置清理等步骤。特别强调要删除所有用户数据(包括多用户环境),确保系统无残留。文末建议重启计算机以使更改生效,实现"一步到位"的彻底卸载。

一键难忘的博客 298

acm 3 1011 有只小蜜蜂

1.1011 2. 一只小蜜蜂... Problem Description 有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。 其中,蜂房的结构如下所示。 2044 一只小蜜蜂 递推类" title="杭电ACM 2044 一只小蜜蜂 递推类" style="margin:0px; padding:0px; borde

ljtlyy(15网络路婧婷) 491

电商平台系统需求规格说明书(示例)

​​电商系统​​:指本文件所描述的集商品展示、销售、支付、物流跟踪、用户管理等功能于一体的综合性在线购物平台。​​API​​:应用程序编程接口(Application Programming Interface),用于实现系统各模块之间或与外部系统之间的数据交互和功能调用。

跟佟格湾一起学习计算机知识吧~ 1262

小蜜蜂问题|函数迭代V.S.函数递归|斐波那契数列|字符串加法(略)

小蜜蜂问题|函数迭代V.S.函数递归|斐波那契数列|字符串加法(略)

Ham_m的博客 336

claude-hub:GitHub上的AI开发助手,让Claude自动帮你写代码、审代码、合代码

代码不再是人写的,而是人引导 AI 写的。在这个时代,GitHub 不再只是一个代码托管平台,而是 AI 开发代理的工作台。每一个 issue、每一条 PR,都可能是一次与 AI 合作的机会。未来属于那些敢于把开发流程交给 AI 来优化的人——他们不是在取代自己,而是在放大自己的影响力。📌关注本系列文章,我们将持续输出关于 AI 编程、GitHub 自动化、AI Agent 产品化的深度分析。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 1372

YOLOv8改进系列:RepVGG重参数化结构——训练多分支,推理单路,极致提速

本文将详细介绍如何将RepVGG的重参数化思想融入到YOLOv8的骨干网络中,实现一种训练时多分支、推理时单路的改进版YOLOv8。我们将提供完整的代码实现、详细的原理讲解,并在COCO数据集和自定义数据集上进行充分的实验验证。

YOLO 200

H8:小蜜蜂

刷题的自我回顾

June_sixth的博客 874

python基础知识补充

1. jupyter notebook 解释 2. ipython 魔法命令 3. latex in Markdown cell(在markdown里面编写数学公式) 4. jupyter notebook功能扩展:安装Nbextension 5. python解释与运行 6. 垃圾回收(计数机制与分代回收机制) 7. 名字空间与局部作用域L和全局作用域G 8. 小整数缓存区与字符驻留 9. Statement &Expression 10. 调试

weixin_43178406的博客 1万+

H11【选做•游戏】小蜜蜂

显然可行路线只和a-b的大小有关,和a、b具体值无关,为了方便理解我们不妨设a=0。f(n)表示到格子n的可行路线,则有f(n)=f(n-1)+f(n-2),f(1)=1,f(2)=1。不过我们很快发现问题,斐波那契数列到99项有二十多位数,即使long long int都存不下。则我们发现f(n)为斐波那契数列,并且方案数量即为f(b-a),所以我们可以直接创建个数组,用for循环搞定。事实上,我们只要知道斐波那契数列前99项即可,所以这道题我们完全可以打表[狗头][狗头]

2301_79834688的博客 339

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

1412【一只小蜜蜂】斐波那契数列

Problem 有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。 其中,蜂房的结构如下所示。 Sample Input 2 1 2 3 6 Sample Output 1 3 Code #include&lt;stdio.h&gt; int GetPathNumber(int a,int b); int main(){ int t,a...

roki 498

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

斐波那契数列

斐波那契数列   0,1,1,2,3,5,8,13.... F(n) = F(n-1)+F(n-2); F(0) = 0; F(1) = 1; 求解F(n)的算法 // 解法1:function fbnq (n){ var x=0,y=1; var result =0; if(n != 0 ){ for(var i=1;i<n

chen_pluto的专栏 473

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Problem 6 爬楼梯&小蜜蜂

简要题意: R:有一楼梯共M级,从第1级开始,若每次只能上1级或2级,要走上第M级,共有多少种走法。 S:蜜蜂只能爬向右侧相邻蜂房。计算蜜蜂从蜂房a爬到b的可能路线数。蜂房结构如下。 解题思路: 经过找规律,两道题的解题思路完全相同,都用到斐波那契数列(从第三项开始,每一项都等于前两项之和)。首先计算出第一个和第二个数值,然后进行斐波那契数列的循环,将每个数赋值到数组中,然后输入 R:输入...

qq_43240470的博客 126

递归求解问题hdu2044一只小蜜蜂...

** 一只小蜜蜂… ** Problem Description 有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。 其中,蜂房的结构如下所示。 Input 输入数据的第一行是一个整数N,表示测试实例的个数,然后是N 行数据,每行包含两个整数a和b(0<a<b<50)。 Output 对于每个测试实例,请输出蜜蜂从蜂房a爬到...

weixin_43736492的博客 1018

Fibonacci 数列小结

大菲波数 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submission(s) : 36   Accepted Submission(s) : 8 Font: Times New Roman | Verdana | Georgia Font Size: ←

小西 957

杭电2044--一只小蜜蜂...--(递推求解)斐波那契数列应用

题目:http://acm.hdu.edu.cn/showproblem.php?pid=2044 蜜蜂在1格里,它可以往2、3两格里爬。蜜蜂在6格里,它可以往7、8格里爬。 如果默认是从第一个开始走,所以n格的走法就是n-1格加上n-2格的走法,即f(n)=f(n-1)+f(n-2),即斐波那契数列。 此题中所求为f(b-a)。 代码如下: #include int main() {

UI_Shero的专栏 1533

HDU-2044 一只小蜜蜂

HDU-2044 一只小蜜蜂 题目链接:添加链接描述 **注意事项:**斐波那契数列的第49个数用int超出了,所以改用long long型 #include<bits/stdc++.h> using namespace std; int main () { long long fib[50]; int i; fib[0]=1; fib[1]=1; for(i=2;i<50;i++) fib[i]=fib[i-1]+fib[i-2]; int n,a,b; cin>

qq_55788088的博客 129

一只小蜜蜂

输入数据的第一行是一个整数N,表示测试实例的个数,然后是N 行数据,每行包含两个整数a和b(0<a<b<50)。有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。然后深刻让我理解了不开longlong见祖宗这句话。其中,蜂房的结构如下所示。其实就是斐波那契数列的问题。

qq_74593128的博客 311

问题 S: 一只小蜜蜂...(初始化dp)

该题递推公式为斐波那契数列,而n达到50,是非常大的数 ,2.注意点:初始化起点,切忌重新递归找数。可以直接初始化所求数据,对应之前数据。应用循环代替递归,同时记录数据。

2301_79140115的博客 166

2044-一只小蜜蜂(java)

思路:首先看到这种题自然而然想起了找规律,仔细观察不难发现,这是一道简单的斐波那契数列的题目。用数组方法比递归好些,递归在循环过程中比较费时间和空间。 提示:在用数组调用时,从1-50的路线结果是要超过int类型的字节长度的,要调用long类型数组来加长 import java.util.*; public class Main { public static void main(String[] args) { Scanner v=new Scanner(System.in); int N=v.ne.

weixin_45956604的博客 224

“21天好习惯”第一期-14 HDU2044 一只小蜜蜂

题目链接:HDU2044 一只小蜜蜂 #include<stdio.h> int main() { int x,a,b,i; scanf("%d",&x); while(scanf("%d %d",&a,&b)!=EOF) { double f1=0,f2=1,f=0; for(i=0;i<(b-a);i++) { f=f1+f2; f1=f2; f2=f; .

子卿Up的博客 294

C++ hdoj 2044 一只小蜜蜂

//这是一道递归题 #include using namespace std; int main() { int n; cin>>n; while(n--) { int a,b,m,i; long long f[50]={1,2}; /*斐波那契数列的第20个就已经超出了 int 型整数了,为了防止边界溢出,把数组定义成64位的  long long 型的*/ cin>>a

xunfengdumo的博客 660
上一篇: 循环-猜数字
下一篇: 穷举-买东西
NoNeil
博客等级 码龄15年 108粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值