十级台阶走法(非递归)

     #include<iostream.h>
      #include<stdio.h>
      #include <conio.h>
      #define MAXSTEPS 10
       unsigned long int xianxing(int steps, int once)//线性计算方法,用一个数组保存结果
      //计算完毕后,返回数组最后一个值,就是结果。
    {         unsigned long int save[MAXSTEPS + 1];
               int i, j;
                unsigned long int temp;
       for(i = 0; i <= MAXSTEPS; i++)
              save[i] = 0;
       if(steps > MAXSTEPS || steps <= 0)
              return 0;
       save[0] = 1;
       save[1] = 1;
       if(steps == 1)
                     return save[0];
       int min = steps <= once ? steps : once;
       for(i = 2; i <= min; i++)
       {
              for(j = 1; j <= i; j++)
              {
                     save[i] += save[i - j];
              }
       }
       if(steps > once)
       {
              for(i = once + 1; i <= steps; i++)
              {
                     for(j = 1; j <= once; j++)
                     {
                            temp = save[i];
                            save[i] += save[i - j];
                            if(save[i] <= temp)//表示计算溢出!
                                   return 0;
                     }
              }
       }
       return save[steps];
}
void main()
{
    int upStairs,steps,s;
    char a;
    do
    {
       cout<<"请输入阶梯数及步长:"<<endl;
       cin>>upStairs>>steps;
       s=xianxing(upStairs,steps);
       cout<<"总共的走法为:"<<s<<"种"<<endl;
       a=_getch();
    }
    while(a!=' ');
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值