正常简单题:通过仔细观察推断即可看出这是一个斐波拉契数列的题目。

HDOJ2041_超级楼梯

在做这题的时候我误入了思维盲区,只想着什么方法可以解决,没有看出是斐波拉契数列。因此第一次用组合数方法打了一次但是WA了,过程中我发现了WA的真正细节(整形数超过范围)还算是有所收获的。

组合数求和解

(WA:因为会炸范围导致M稍微大一些答案就错了)

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h> int main()
{
int n,i,j,steps;
scanf("%d",&n);
for(i=0;i<n;i++)
{
unsigned long long sum=0;
scanf("%d",&steps);
int max2=(steps-1)/2;//表示最多可以走多少步一次跨两级阶梯
//循环遍历每一种方法中走0次,1次两阶梯,2次,3次...
for(j=0;j<=max2;j++)
{
int n1=steps-1-2*j;//改方法中走了多少次跨两级阶梯
int n2=j;//该方法中走了多少次跨两级阶梯
int stp=n1+n2;
//计算C(n1+n2,n2)组合数然后叠加即可
int p,q;
int sum1=1,sum2=1;
for(p=1;p<=n2;p++)
{
sum1*=(stp--);
sum2*=p;
}
sum+=sum1/sum2;
}
printf("%lld\n",sum);
}
return 0;
}

错误警示:

在对比用斐波拉契数列找出为什么会出错的时候,我随意输入了一串阶梯进行对比,发现在20之前的答案是一致的,但是当M=30时,就出错了,仔细思考意识到代码中使用了累乘,那么整形显然是会爆炸的最后,自然就得不到正确的答案了。计算器摁了一下1乘到13就达到6227020800了,后面炸不炸显而易见。效果如下图

正解

错解

斐波拉契数列求解

观察可得f(1)=0;f(2)=1;f(3)=2;

f(n)=f(n-2)+f(n-1);(n>3时),这是一道利用斐波拉契数列解的题目。上代码

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h> int fe[50]={0}; int main()
{
int i,j,n;
int steps;
fe[1]=0;fe[2]=1;fe[3]=2;
for(i=4;i<=41;i++)
{
fe[i]=fe[i-1]+fe[i-2];
}
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&steps);
printf("%d\n",fe[steps]);
}
return 0;
}

HDOJ2041_超级楼梯(斐波拉契数列)的更多相关文章

  1. 斐波拉契数列加强版——时间复杂度O(1),空间复杂度O(1)

    对于斐波拉契经典问题,我们都非常熟悉,通过递推公式F(n) = F(n - ) + F(n - ),我们可以在线性时间内求出第n项F(n),现在考虑斐波拉契的加强版,我们要求的项数n的范围为int范围 ...

  2. 剑指offer三: 斐波拉契数列

    斐波拉契数列是指这样一个数列: F(1)=1; F(2)=1; F(n)=F(n-1)+F(n); public class Solution { public int Fibonacci(int n ...

  3. 关于斐波拉契数列(Fibonacci)

    斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10 ...

  4. 剑指offer-第二章算法之斐波拉契数列(青蛙跳台阶)

    递归与循环 递归:在一个函数的内部调用这个函数. 本质:把一个问题分解为两个,或者多个小问题(多个小问题相互重叠的部分,会存在重复的计算) 优点:简洁,易于实现. 缺点:时间和空间消耗严重,如果递归调 ...

  5. 剑指offer-面试题9.斐波拉契数列

    题目一:写一个函数,输入n,求斐波拉契数列的第n项. 斐波拉契数列的定义如下: { n=; f(n)={ n=; { f(n-)+f(n-) n>; 斐波拉契问题很明显我们会想到用递归来解决: ...

  6. C语言数据结构----递归的应用(斐波拉契数列、汉诺塔、strlen的递归算法)

    本节主要说了递归的设计和算法实现,以及递归的基本例程斐波拉契数列.strlen的递归解法.汉诺塔和全排列递归算法. 一.递归的设计和实现 1.递归从实质上是一种数学的解决问题的思维,是一种分而治之的思 ...

  7. [NEUQ-OJ] 1012 SZ斐波拉契数列

    一道水题,让我看清基础我的基础是多么薄弱. 递归,数组清零,数组名/变量名重复层出不穷...路漫漫啊.......... http://ncc.neuq.edu.cn/oj/problem.php?i ...

  8. 浅谈C#中的斐波拉契数列

    突然对那些有趣的数学类知识感兴趣了,然后就简单研究了一下斐波拉契数列,看看它的有趣之处! 斐波拉契数列(Fibonacci Sequence),又称黄金分割数列,该数列由意大利的数学家列奥纳多·斐波那 ...

  9. Go斐波拉契数列(Fibonacci)(多种写法)

    1 前言 斐波拉契数列有递归写法和尾递归和迭代写法. 2 代码 //recursion func fib(n int) int{ if n < 2{ return n }else{ return ...

随机推荐

  1. python五十四课——datetime模块

    3.datetime模块:理解:datetime可以认为是time模块的补充/扩展datetime模块中有一些常用类:datetime类:记录了日期和时间数据信息date类:记录了日期数据信息time ...

  2. PHP常见面试题汇总(二)

    PHP常见面试题汇总(二)   //第51题:统计一维数组中所有值出现的次数?返回一个数组,其元素的键名是原数组的值;键值是该值在原数组中出现的次数 $array=array(4,5,1,2,3,1, ...

  3. oracle SQL 执行顺序

    Oracle执行SQL查询语句的步骤 1.SQL正文放入共享池(shared pool)的库缓存(library cache). 2.检查是否有相同的SQL正文,没有就进行以下编译处理,否则跳过. 1 ...

  4. Echo团队Alpha冲刺随笔 - 第三天

    项目冲刺情况 进展 完成了三分一左右,前端整体页面框架已有,后端也在稳步推进 问题 今天问题较少,主要还是出在对于框架的掌握上 心得 继续加油! 今日会议内容 黄少勇 今日进展 实现社区公告,个人信息 ...

  5. QT listwiget 控件添加图片

    很多的时候我们需要制作类似手机的中的电子相框, 可以用listwidget 控件实现 直接上代码 MainWindow::MainWindow(QWidget *parent) : QMainWind ...

  6. ubuntu (14.04) 卸载 gnome 系统桌面

    1.将ubuntu 的图形界面切到命令行界面. 2.卸掉 gnome-shell 的主程序 sudo apt-get remove gnome-shell 3.卸载 gnome sudo apt-ge ...

  7. Redis缓存的使用

    首先需要去Redis官网下载Redis的安装包 要在eclipse中使用Redis还需要两个jar包,需要的自行查找或者联系我 运行Redis需要开启Redis的服务端,也就是下载的安装包中的“red ...

  8. ajax获取的数据如何渲染到dom元素上

    1.常见的字符串拼接 (对于动态创建的元素添加js时,使用事件委托,利用事件冒泡的原理,把事件添加到父级元素上,触发执行效果) $("ul").on('click','li',fu ...

  9. 从github checkout子文件夹

    1.将远程项目加载到指定目录:$git init; $git remote add -f origin url2.使用SparseCheckout模式:$git config core.sparsec ...

  10. Luogu P3327 [SDOI2015]约数个数和

    又是恶心的莫比乌斯反演,蒟蒻我又是一脸懵逼的被CXR dalao狂虐. 题目要求\(ans=\sum_{i=1}^n \sum_{j=1}^m d(ij)\),其中\(d(ij)\)表示数\(x\)的 ...