2019.1.27 自主训练日志

      训练第七天,前两天休息,想着让自己缓解一下,放松一下。今天恢复训练。简单说一下今天的成果。
      首先今天把课本前十章看完了,巩固了一下指针、函数部分的知识,越发感觉指针的强大和函数的简洁。指针的强大在于它可以将我们带入计算机本身,对存储空间直接进行操作,所以透过指针我们对数据的操作的影响是根本性的,也因为这点,在使用指针时要特别注意,指针要有方向,切不可乱指一气,对程序造成毁灭性的打击。函数将复杂的程序封装起来,使用时只需要传递给它特定数据类型的数据就可以完成想要的运算,其实我们现在所使用的库函数就是最基础的函数类型,只不过具体代码不知道,还是很期盼看到库函数内部的样子~( ̄▽ ̄~)~使用函数也可以使程序的逻辑结构更加清楚。
      除此以外,51nod上的题目做了不少,很多都是一眼就有思路的题目,就不再详细解释了,具体说一下今天遇到的斐波那契数列的题目。

题目描述 现在小瓜想走上一个一共有n级的台阶,由于小瓜的腿比较短,他一次只能向上走1级或者2级台阶。小瓜想知道他有多少种方法走上这n级台阶,你能帮帮他吗?
输入
一行一个整数n(n<=100000),表示一共有n级台阶。
输出
一行一个整数,表示小瓜上台阶的方案数对100003取余的结果。
输入样例
3
输出样例
3
其实一开始我并不知道这是一个关于斐波那契数列的题目,甚至都不知道这是干嘛的,后来手写了一阵子,又从CSDN上看了几篇文章才搞明白题目与斐波那契的关系。假设一共一阶台阶,那么就是有1种走法,2阶就是2种,3阶就是3种,4阶就是5种,5阶就是8种,1 2 3 5 8刚好是斐波那契数,后来又仔细一想,3阶台阶可以看成是1阶和2阶加起来的,那么走的方式也是加在一起的,前两项加前一项的和是本项,这不就是斐波那契数列的定义嘛!于是就想到了递归函数,程序编译完后输入测试数据,符合要求,但提交后超时了。其实不难发现,递归太耗时了,每计算一次就要递归到最后一项,数据小了还好说,数据一大,时间就长了。然后选择用迭代代替了递归,时间缩短了,但还是无法AC!后来看了半天,算法没错,结果也符合自己算的。苦恼半天才发现是审错题了,输出对100003取余的结果!后来又跌跌撞撞的改了好几遍才算成功,代码实现如下
#include
using namespace std;
int jump(int a);
int main ()
{
int n,m;
cin>>n;
m=jump(n);
cout<<m;
return 0;
}
int jump(int a)
{
int b=1,c=2,result=0;
if(a1) {return b;}
if(a
2) {return c;}
for(int i=3;i<=a;i++)
{
result=b+c;
b=c;
c=result%100003;
}
return result;
}
明天训练继续!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值