Ⅰ c语言作业,用for循环 从一楼到二楼有20个台阶,人一次只能走一个或两个台阶,从一楼到二楼有多少种走法
#include<stdio.h>
int c(int n)
{
if(n==1)return 1;
if(n==2)return 2;
return (c(n-1)+c(n-2));
}
int main()
{
printf("%d",c(20));
}
10946 公式c(n)=c(n-1)+c(n-2),c(1)=1,c(2)=2
Ⅱ C语言编程 台阶问题
这是一道高精度的题目。
首先,题目要求每次允许上一个或两个台阶,实际上每个楼梯只要把前两个楼梯的值相加就可以了(也可以认为是一个斐波那契数列),但是100个楼梯会超出long long 只能使用高精度了。
或者还可以使用通项公式(高中内容)
Ⅲ C语言 爬楼梯的问题
用递归解决比较方便:
#include<stdio.h>
int fibonacci (int n)
{
if (n > 2)
return fibonacci(n - 1) + fibonacci(n - 2);
else
return 1;
}
int main()
{
int data[20];
int t;
int i;
printf ("Please input T and the nums: \n");
scanf ("%d", &t);
for (i=0; i<t; i++)
{
scanf("%d", &data[i]);
}
printf("The output: \n");
for (i=0; i<t; i++)
{
printf("%d\n", fibonacci (data[i]+1));
}
return 0;
}
/* 这是斐波那契算法的一个应用,你可以搜索一下 */
Ⅳ C语言 台阶问题
1、void fun(char *pvDest, const char *pvSrc, unsigned int uiCopyLen)
{
int i =uiCopyLen;
char *src_P,*dest_P;
src_P = pvSrc;
dest_P = pvDest;
int len=strlen(pvSrc);
if(len >= uiCopyLen) {
for(i=0;i<uiCopyLen;i++)
{
*dest_P = *src_P;
src_P++;
dest_P++;
}
}
}
2、妨设有n阶台阶,既然一次只能走一步或2步或3步,那么假设现在仅剩下最后一步要走,
有三种情况:
一 只需要走一步,这时已经走了(n-1)阶,走法与走n-1阶相同,有f(n-1)阶走法;
二 只需要走两步,同上分析有f(n-2);
三 只需要走三步,有f(n-3);
所以走n阶台阶有f(n)=f(n-1)+f(n-2)+f(n-3)种走法;
很明显,走1阶台阶有1种方法;
走2阶有两种走法;
走3阶有4种走法,如下:1 1 1 1 2 2 1 3;
所以我列出总台阶数与走法的对应表:
1 2 3 4 5 6 7 8 9 10
1 2 4 7 13 24 44 81 149 274
所以有274种走法,是不是不可思议啊
程序实现如下:
unsigned int fun(unsigned int n)
{
if(n==1)
return 1;
else if(n==2)
return 2;
else if(n==3)
return 4;
else return fun(n-1)+fun(n-2)+fun(n-3);
}
另外,虚机团上产品团购,超级便宜
Ⅳ C语言问题,台阶问题编程
#include<stdio.h>
intfuck(intn,intm)
{
if(n==1||n==0)return1;
if(n<0)return0;
inttotal=0;
inti=1;
for(;i<m;++i)
{
total+=fuck(n-i,m);
}
returntotal;
}
intmain()
{
inta;
scanf("%d",&a);
intn[a];
inti;
for(i=0;i<a;++i)
{
scanf("%d",&n[i]);
}
intb;
scanf("%d",&b);
intm[b];
for(i=0;i<a;++i)
{
scanf("%d",&n[i]);
}
for(i=0;i<a&&i<b;++i)
{
printf("%d",fuck(n[i],m[i]));
}
return0;
}
没编译器,你先编译试试,应该没错
望采纳~
Ⅵ c语言上台阶答案
这个要用递归做。到某一阶n有两种可能,从第n-1上1阶,从第n-2上2阶,因此到达第n阶的的函数f(n)的走法等于f(n-1)+f(n-2),即到达f(n-1)阶的走法与f(n-2)阶的走法之和!
代码如下:
int f( int n )
{
if ( n == 1 )
{
return 1;
}
else if ( n == 2 )
{
return 2;
}
else
{
return f(n-1) + f(n-2);
}
}
int main()
{
int num = f( 10 );
return 0;
}
打印出num的值得话,可以看到10阶共有89种走法。
Ⅶ 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阶楼梯都不成问题。