使用递归解决该问题。
double tang(int n,double sum,double k){//n为需要的反弹次数,题目为10
if(n<10){
tang(n+1,sum+k*2,k/2);
}else{
printf("小球第%d次落地时路过的路径为%lf米,再弹起时高度为:%lf米\n",n,sum,k);
}
}
int main(){
tang(1,100,50);//第一次时的值
return 0;
}
如不使用递归,可以用循环解决。
int main(){
int n,i;
double sum,j=50;
scanf("%d",&n);//输入需要的反弹次数
for(i=1;i<=n;i++) {
if(i==1){
sum=100;//第一次落地
}else{
sum+=j*2;
j=j/2;
}
}
printf("第%d次落地小球路过的路径为:%.6lf,再弹起高度为:%.6lf\n",n,sum,j);
}