zoukankan      html  css  js  c++  java
  • 爬楼梯算法 bug 容易被忽视的变量越界

    问题回顾:

      现在一共有n阶楼梯,你可以一次跨1节楼梯,也可以一次跨2节,给出跨n节楼梯的总的方法数。1<=n<=50.

    例1:

    输入:  5

    输出:  8

    例2:

    输入:  1

    输出:  1

    我自己写了一个程序,结果前38节楼梯的结果都是对的,从第39节楼梯开始出错。不知何故?

    我的程序:

    #include<iostream>
    using namespace std;
    
    long long C_a_b(int a, int b)
    {
        int i_for, a_;
        long long temp1 = 1, temp2 = 1;
        a_ = a;
        for (i_for = 0; i_for < a; i_for++)
        {
            temp1 *= b;
            b -= 1;
        }
        for (i_for = 0; i_for < a_; i_for++)
        {
            temp2 *= a;
            a -= 1;
        }
        return (temp1 / temp2);
    }
    
    int main()
    {
        long long answer = 1;
        int n, m_max;
        int i_for;
        cin >> n;
        m_max = n / 2;
        for (i_for = 1; i_for < m_max + 1; i_for++)
        {
            answer += C_a_b(i_for, n - i_for);
        }
        cout << answer << endl;
        cin >> n;
        return 0;
    }

    正确的结果的代码:

    #include<iostream>
    using namespace std;
    
    int main()
    {
        int i_for,length;
        cin >> length;
        long long *data=new long long[length];
        data[0] = data[1] = 1;
        data[2] = 2;
    
        for (i_for = 3; i_for < length; i_for++)
        {
            data[i_for] = data[i_for - 1] * 2 - data[i_for - 3];
        }
        cout << data[length - 1] << endl;
        delete []data;
        return 0;
    }

      我就郁闷了,前面38个台阶爬的好好地,为什么到了第39个台阶就不行了?果然程序还是要简洁点好吗!!!

      这个bug先整理出来放在这里。

    下面几张图是调试截图:

    总结:

      程序产生的中间变量不能太大。简单易行的算法才是好算法!!!!

  • 相关阅读:
    盘符格式转换成NTFS格式
    jdk环境变量配置
    修改mysql密码
    端口占用解决
    程序执行原理
    第一个Python程序
    pip安装第三方库失败的问题
    windows本地安装mongoDB并且安装可视化工具studio 3t
    开发时前端测试方法
    虚拟机配置vimrc
  • 原文地址:https://www.cnblogs.com/gukz/p/5561410.html
Copyright © 2011-2022 走看看