大家好,今天给各位分享楼梯c到哭不止的一些知识,其中也会对上楼梯问题c/c++进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!
上楼梯问题c/c++
你好,楼主,为了我团队的荣誉,我是给你解出来了。
我用的是栈这个数据结构,代码如下,不懂请追问
#include"stdlib.h"
#include"stdio.h"
typedef struct{
int* base;
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