首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一路编程题目,求算法

2013-07-08 
一道编程题目,求算法有n级台阶,每次可以走1级或者2级,求有多少种走法希望算法尽可能的有效率,谢谢了![解决

一道编程题目,求算法
有n级台阶,每次可以走1级或者2级,求有多少种走法

希望算法尽可能的有效率,谢谢了!
[解决办法]
裴波那契数列啊。
[解决办法]


#include <stdio.h>

int step(int n)
{
    if(n == 1 
[解决办法]
 n == 2)
        return 1;
        
    return step(n - 1) + step(n - 2);        
}

int main(void)
{
    int i;
 
    for(i = 1; i < 30; i++)
        printf("%d\n", step(i));
        
    return 0;
}

[解决办法]
2阶台阶有二种走法。


上n阶台阶有两种方法:
方法1:先上n-1阶台阶,再上第n阶
方法2:先上n-2阶台阶,然后还有两种走法(一阶一阶上,两阶一起上)

所以应该是:


int func( int n )
{
   int result;
   if( n == 1 )
   {
      result = 1;
   }
   else if( n == 2 )
   {
      result = 2;
   }
   else
   {
       resull = func(n - 1 ) + func(n - 2 ) * 2
   }
   return result;
}

[解决办法]
错了,想多了,n-2后一级一级上和n-1的重了。还是裴波那契数列.
[解决办法]
引用:

#include <stdio.h>

int step(int n)
{
    if(n == 1 


[解决办法]
 n == 2)
        return 1;
        
    return step(n - 1) + step(n - 2);        
}

int main(void)
{
    int i;
 
    for(i = 1; i < 30; i++)
        printf("%d\n", step(i));
        
    return 0;
}



如果最后n = 2 了可以走一次 也可以走两次啊  每次可以一级或者两级啊
[解决办法]
有n级台阶,每次可以走1级或者2级,求有多少种走法
解:

//大的惊人,10阶梯都有4037880种走法,
int sum=0;//一共有多少次走法,默认全部都走一步,将这一次作为初始值
int n=10;//n是自己定义大小的一个数
for(int i=0;i<=n;i++){//因为包含一步都不走,所以循环次数会多一次
if(n%2==0){//如果总数是偶数,那么走一步的数量也必然是偶数才可能,奇数无效,直接continue;
if(i%2!=0){
continue;
}
}else{//如果总数是奇数,那么走一步的数量也必然是奇数才可能,偶数无效,直接continue;
if(i%2==0){
continue;
}
}
//得到当前走一步的数量
int oneSum=i;
//计算出当前走两步的数量
int towSum=(n-i)/2;
//那么接下来只要算出走一步的数量和走2步的数量有多少种排列方式,就算出了走i次一步可能有多少种走法了,加上这是个循环,最后的结果就正确了
//现在计算的好比是12345,和6789这些数任意组合,有多少种组合方式,最终也就成了123456789任意排列了,学过排列组合都知道,该不断相乘
//得到总的步数
int sumAll=oneSum+towSum;
int tamp=0;//记录前一个乘积结果
//遍历总步数,不断乘积
for(int s=1;s<=sumAll;s++){
if(s==1){//这一步判断而不直接给tamp赋值1,是不希望,没有循环次数的时候,却出现1的结果
tamp=1;
}else{
tamp=s*tamp;
}
}
//将结果加入结果中
sum+=tamp;
    }
System.out.println(sum);

热点排行
Bad Request.