大家好,今天给各位分享楼梯c到哭不止的一些知识,其中也会对上楼梯问题c/c++进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!

上楼梯问题c/c++

你好,楼主,为了我团队的荣誉,我是给你解出来了。

楼梯c到哭不止(上楼梯问题cc++)

我用的是栈这个数据结构,代码如下,不懂请追问

#include"stdlib.h"

#include"stdio.h"

typedef struct{

int* base;

楼梯c到哭不止(上楼梯问题cc++)

int* top;

int stksize;

}stack;

//初始化栈

int init(stack&s,int size)

{

s.base=(int*)malloc(size*sizeof(int));

if(!s.base)return-1;

s.top=s.base;

s.stksize=size;

return 1;

}

//压栈

int push(stack&s,int e)

{

*s.top=e;

s.top++;

return 1;

}

//获得栈长度

int lenth(stack s)

{

int len;

len=s.top-s.base;

return len;

}

//取栈顶

int pop(stack&s)

{

if(s.base==s.top)return 0;

s.top--;

return 1;

}

//打印栈的所有元素

void prt_stack(stack s)

{

int l=lenth(s);

int i;

for(i=0;i<l;i++)

printf("%d",*(s.base+i));

printf("\n");

}

//打印case n:

void prt_case(int&a)

{

a++;

printf("Case%d:",a);

}

//求栈的总和

int sum_stack(stack s)

{

int l=lenth(s);

int i;

int sum=0;

for(i=0;i<l;i++)

sum+=*(s.base+i);

return sum;

}

int main()

{

stack s;

int i,count=0;

int m,n;//n个台阶,最大走m步

scanf("%d",&n);

scanf("%d",&m);

//初始化一个大小为n的栈

if(init(s,n)==-1)

{

printf("内存分配失败\n");

return 0;

}

//全部赋值为1

for(i=0;i<n;i++)

*(s.base+i)=1;

//求解循环

while(*(s.base)<=m)

{

if(sum_stack(s)==n)

{

prt_case(count);

prt_stack(s);

pop(s);

*(s.top-1)+=1;

}

if(sum_stack(s)<n)

{

push(s,1);

}

}

return 1;

}

《C语言》怎样爬楼梯

楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,编一程序计算共有多少种不同的走法?

【参考解答(递归法)】

基础:楼梯有一个台阶,只有一种走法(一步登上去);两个台阶,有2种走法(一步上去,或分两次上去);

递推:有n个台阶时,设有count(n)种走法,最后一步走1个台阶,有count(n-1)种走法;最后一步走2个台阶,有count(n-2)种走法。于是count(n)=count(n-1)+count(n-2)。

可见,此问题的数学模型竟然是斐波那契数。

#include<stdio.h>int main()

{ unsigned long count(int n); int n; unsigned long m; printf("请输入楼梯的阶数:"); scanf("%d",&n);

m=count(n); printf("有%lu种爬楼梯的方法\n",m); return 0;

}unsigned long count(int n)

{ unsigned long f; if(n==1)

f=1; else if(n==2)

f=2; else

f=count(n-1)+count(n-2); return(f);

}1234567891011121314151617181920212223