有n阶阶梯,每步可走1阶或2阶,求每一步走法,和有多少种走法,用C语言编...
发布网友
发布时间:2022-04-25 04:09
我来回答
共2个回答
热心网友
时间:2022-04-12 20:22
其实就是数学的排列组合的问题。对排列组合求和。
我就不列出是怎样的排列了,就列出有几类排列组合,还有结果。
#include <stdio.h>
#include <stdlib.h>
inline long A(int a1,int a2)
{
int r=1;
for(int i=0;i<a2;i++)
r*=a1--;
return r;
}
inline long C(int c1,int c2)
{
double r=1;
int nc2=c2;
for(int i=0;i<c2;i++)
{
r*=c1--;
if(nc2>0)r/=nc2--;
}
return (long)r;
}
int main()
{
int n;
long sum=0;//阶级数,结果
int max2;//最大2步数
int nums1,nums2;//1的个数,2的个数
int i;
printf("stairs: 0<n<40\n");
scanf("%d",&n);
if(n%2==0)
max2=n/2;
else
max2=(n-1)/2;
printf("max step2:%d\n",max2);
for(i=0;i<=max2;i++)
{
int temp;
nums2=i;
nums1=n-nums2*2;
printf("step1:%d,step2:%d\n",nums1,nums2);
temp=C(nums1+nums2,nums2);//;sum+=C(nums1+nums2,nums1);
printf("ways:%d\n",temp);
sum+=temp;
}
printf("final ways:%d\n",sum);
return 0;
}
热心网友
时间:2022-04-12 21:40
用递归,第n阶的走法是n-1阶和n-2阶的和,而第一阶有1种走法,第二阶有2种走法,第三阶走3种走法,递归