上一次楼梯就C一下 上一个楼梯就那个一下
温馨提示:这篇文章已超过35天没有更新,请注意相关的内容是否还可用!
c语言设计爬楼梯的方法
我是学pascal的~只说得上来算法。
你说的
爬楼梯
是指有n阶楼梯,每次可以上1,2……,p阶(1=p=n),问走到最上面有多少种不同的走法吧?
这个就是
递推
啊~
设上i级台阶共有f(i)种不同的方法,很简单就可以知道f(1)=1,f(2)=2……
当i大于2时,分n种情况讨论:第一步上了1级台阶,第一步上了2级台阶,……第一步上了n级台阶。
如果第一步上了1级楼梯,那么还剩下i-1级楼梯,要走完这i-1级楼梯,一共有f(i-1)种方法。
如果第一步上了2级楼梯,那么还剩下i-2级楼梯,要走完这i-2级楼梯,一共有f(i-2)种方法。
……
如果第一步上了n级楼梯,那么还剩下i-n级楼梯,要走完这i-2级楼梯,一共有f(i-n)种方法。
所以,在第一种情况下有f(i-1)种不同走法,第二种情况有f(i-2)种不同走法……这n种情况既没有重复方案,也没有遗漏,因此得出f(i)=f(i-1)+f(i-2)+……+f(i-n)
接着就行了,200阶楼梯都不成问题。
C语言爬楼梯
#includestdio.h
int main()
{int i,n,T,a[31]={1,1,2};
scanf("%d",T);
for(i=3;i31;i++)
a[i]=a[i-1]+a[i-2]+a[i-3];
for(i=0;IT;i++)
{scanf("%d",n);
printf("%d\n",a[n]);
}
return 0;
}
算法设计 爬楼梯类型,共n阶楼梯,一次最多爬m阶,用JAVA或者C或者C++
循环,,,,,好多循环,,,,哇,,,,实现了
#includestring.h
#includeiOStream
#includestack
using namespace std;
int main()
{
int n = 0, m = 0, sum = 0, cnt = 0;
cout"输入阶梯数:" endl;
cin n;
cout"输入最多爬的阶梯数:" endl;
cin m;
if (n = 0)
{
cout"就一种,上去了!" endl;
}
if (m = 0)
{
cout"你想上是不可能的!" endl;
}
int i;
stackint sk;
do
{
if (sum = n)
{
++cnt;
while (sum = n)
{
sk.push(1);
++sum;
}
}
if (!sk.empty())
{
sum -= sk.top();
sk.pop();
}
else
{
cout cnt endl;
return 0;
}
HHH:
if (!sk.empty())
{
i = sk.top();
}
else
{
cout cnt endl;
return 0;
}
if (i m)
{
++i;
}
else
{
if (!sk.empty())
{
sum -= sk.top();
sk.pop();
goto HHH;
}
else
{
cout cnt endl;
return 0;
}
}
if (!sk.empty())
{
sum -= sk.top();
sk.pop();
}
else
{
cout cnt endl;
return 0;
}
sk.push(i);
sum += i;
} while (1);
return 0;
}
用C语言编程,有20级台阶的楼梯,一次可以迈一级或者俩级台阶,那么要爬完此台阶有几种方法?(需要用
// 兵无常势,水无常形,情景模拟,递归实现
#include stdio.h
int count = 0;
void step(int s, int t)
{
if (s t)
{
step(s+1,t);
step(s+2,t);
}
else if (s == t)
{
count ++;
}
}
void main()
{
int n;
printf("Input n: ");
scanf_s("%d",n);
step(0, n);
printf("The total path is %d\n", count);
scanf_s("%c",n);
getchar();
}
// 用step函数表示爬楼梯的动作,step(爬)(所到层,总层)
// 爬到了吗?没有,再爬一层或两层,
// 爬到了吗?是的,方法加一。 明白吗? 欢迎提问
本文链接:http://www.wsfy.cn/shehui/202305_582.html
发布于:2023-05-04,除非注明,否则均为
原创文章,转载请注明出处。