其实就是数学的排列组合的问题。对排列组合求和。
我就不列出是怎样的排列了,就列出有几类排列组合,还有结果。
include <stdio.h>
include <stdlib.h>
inline long A(int a1,int a2)
{
int r1;
for(int i0;i<a2;i++)
r*a1--;
return r;
}
inline long C(int c1,int c2)
{
double r1;
int nc2c2;
for(int i0;i<c2;i++)
{
r*c1--;
if(nc2>0)r/nc2--;
}
return (long)r;
}
int main()
{
int n;
long sum0;//阶级数,结果
int max2;//最大2步数
int nums1,nums2;//1的个数,2的个数
int i;
printf("stairs: 0<n<40\n");
scanf("%d",&n);
if(n%20)
max2n/2;
else
max2(n-1)/2;
printf("max step2:%d\n",max2);
for(i0;i<max2;i++)
{
int temp;
nums2i;
nums1n-nums2*2;
printf("step1:%d,step2:%d\n",nums1,nums2);
tempC(nums1+nums2,nums2);//;sum+C(nums1+nums2,nums1);
printf("ways:%d\n",temp);
sum+temp;
}
printf("final ways:%d\n",sum);
return 0;
}