有n阶阶梯,每步可走1阶或2阶,求每一步走法,和有多少种走法,用C语言编程
答案:2 悬赏:0 手机版
解决时间 2021-01-14 08:06
- 提问者网友:难遇难求
- 2021-01-14 01:51
有n阶阶梯,每步可走1阶或2阶,求每一步走法,和有多少种走法,用C语言编程
最佳答案
- 五星知识达人网友:不甚了了
- 2021-01-14 02:59
其实就是数学的排列组合的问题。对排列组合求和。
我就不列出是怎样的排列了,就列出有几类排列组合,还有结果。
#include
#include
inline long A(int a1,int a2)
{
int r=1;
for(int i=0;i r*=a1--;
return r;
}
inline long C(int c1,int c2)
{
double r=1;
int nc2=c2;
for(int i=0;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
");
scanf("%d",&n);
if(n%2==0)
max2=n/2;
else
max2=(n-1)/2;
printf("max step2:%d
",max2);
for(i=0;i<=max2;i++)
{
int temp;
nums2=i;
nums1=n-nums2*2;
printf("step1:%d,step2:%d
",nums1,nums2);
temp=C(nums1+nums2,nums2);//;sum+=C(nums1+nums2,nums1);
printf("ways:%d
",temp);
sum+=temp;
}
printf("final ways:%d
",sum);
return 0;
}
我就不列出是怎样的排列了,就列出有几类排列组合,还有结果。
#include
#include
inline long A(int a1,int a2)
{
int r=1;
for(int i=0;i r*=a1--;
return r;
}
inline long C(int c1,int c2)
{
double r=1;
int nc2=c2;
for(int i=0;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
scanf("%d",&n);
if(n%2==0)
max2=n/2;
else
max2=(n-1)/2;
printf("max step2:%d
",max2);
for(i=0;i<=max2;i++)
{
int temp;
nums2=i;
nums1=n-nums2*2;
printf("step1:%d,step2:%d
",nums1,nums2);
temp=C(nums1+nums2,nums2);//;sum+=C(nums1+nums2,nums1);
printf("ways:%d
",temp);
sum+=temp;
}
printf("final ways:%d
",sum);
return 0;
}
全部回答
- 1楼网友:老鼠爱大米
- 2021-01-14 03:37
用递归,第n阶的走法是n-1阶和n-2阶的和,而第一阶有1种走法,第二阶有2种走法,第三阶走3种走法,递归
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯