c语言一球从m米高度自由落下,每次落地后反跳回原高度的一半, 求它在第n次落地时,共经过多少米?

Python012

c语言一球从m米高度自由落下,每次落地后反跳回原高度的一半, 求它在第n次落地时,共经过多少米?,第1张

#include <stdio.h>//望采纳!!

int main()

{

int i,N

double M,s,h=0,k//k用来保存输入的M值

scanf("%lf %d",&M,&N)

k=M

if(N==1)

{

h=M

s=M

}

else

for(i=1,s=0i<=Ni++)

{

s=s+3*M/2//这个s不知道你是用来干嘛的,所以没改

if(i==N)

{

h=h+M

}

else

{

h=h+M+M/2

}

M=M/2

//h=M

}

printf("小球从%.2f米的地方落下,经过三次落地经过的距离为%.2f米.%.2f\n",k,h,s)//这里会输出

return 0

}

if(n<m)

return 0

如果总球数小于取出的球数,则返回0,比如一共有10个球,你要取出11个。显然是没法取,取法是0。

if(n==m)

return 1

如果总球数小于取出的球数,则返回1,比如一共有10个球,你要取出10个。只能全部取出,取法是1。

if(m==0)

return 1

取出0个球。取法也一种,那就是不取。

除了以上的情况,那么可以取出的方式,就是

总球数减一后,取出球数减一后,所有的组合。加上总球数减一后,取出球数不变的组合

return f(n-1,m-1)+f(n-1,m)

重点是最后这一句。应该是一个递归调用。

也就是说,举个例子,如果从4个球里,取出3个。那么所有的取法,等于

3个球里取2个的所有取法,加上3个球里取3个的所有取法。

4个球里取3个。a,b,c,d,一共有abc,abd,acd,bcd 四种取法。

C4,3

3个球里取2个,a,b,c ,一共有ab,ac,bc三种。

3个球里取3个,a,b,c,一共有abc一种取法。

两边相等的,公式是成立的。

参考代码:

#include <stdio.h>

int main()

{

    int m,n,h,i

    scanf("%d%d",&m,&n)

    for(i=0,i<=ni++)

    {

        m/2

        h+=m

    }

    printf("%d",h)//输出总路径

    return 0

}