标签:台阶 14 int sum T2 T1 C语言 com
#include<stdio.h>
int com(int a, int b)//高中学的排列组合中的组合C(a b),下面有一张图。
{
int mother = 1, son = 1;//mother是图片中分母的值。son是图片中分子的值。
int p = a;//因为a存的值,既要用来决定循环次数,又要参与分母的运算,所以用另一个变量p保存a的值来参与mother的运算。
for (int i = 0; i < a; i++)//求分母的值,分母中有几个数相乘就循环几次。
{
mother = mother * p;
p--;
}
for (int i = 0; i < a; i++)//求分子的值,分母中有几个数相乘就循环几次。
{
son = son * b;
b--;
}
return son / mother;//因为是组合,所以不可能为小数。
}
int main()
{
int n = 0, sum = 0;//sum表示走的方法数。
scanf("%d", &n);//总共n个台阶
int T1 = n % 2;//走1个台阶的步数
int T2 = n / 2;//走2个台阶的步数
int k = T2;//T2存的值既要参与sum的运算,又要决定循环次数,所以用另一个变量k存T2的值来决定循环次数。
for (int i = 0; i < k + 1; i++)//k之所以加1,是因为在最初时,没有拆【2台阶】情况下,可能存在有一个【1台阶】的情况。也可能存在没有【1台阶】的情况,没有【1台阶】com函数返回的是1,表示全是【2台阶】的一次走法。
{
sum = sum + com(T1, T1 + T2);//T1为0时,sum就为1。T1不为0,com就算有几种插入方式。
T2--;
T1 += 2;
}
printf("%d", sum);
return 0;
}
//将 一步走一个台阶 表示为【1台阶】,将 一步走两个台阶 表示为【2台阶】。
//假设走T1个【1台阶】再走T2个【2台阶】就能走完。
//那么把每走一步,假设成一个【】,【】中可以存放 1台阶,也可以存放 2台阶。
//总共有T1+T2个【】,将T1个 1台阶 插入到T1+T2个【】中去,剩下的【】全部放 2台阶
//com(a,b)就是计算 有b个【】时,插入a个 1台阶 会有几种插法。
//先从【2台阶】最多的走法开始算sum,然后再把【2台阶】拆掉一个变成两个【1台阶】计算com加到宿命中,依次拆【2台阶】
标签:台阶,14,int,sum,T2,T1,C语言,com 来源: https://blog.csdn.net/weixin_46603347/article/details/122266562
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。