原题链接:[编程入门]自由下落的距离计算
解题思路:
反弹实例 假设起始从100米处下降,则 第一次,反弹高度为50,经过100米。 第二次,反弹高度为25,经过100+50+50=200米(下降100米+弹回50米+下落50米) 第三次,反弹高度为12.5,经过100+50+50+25+25=250米 (下降100米+弹回50米+下落50米+弹回25米+下落25米) 所以利用循环构建反弹模型,sum记和
注意事项:
核心代码,求路程和
while(n--){
sum+=m/2*3; //小球每次从下落到弹起一共的路程
m=m/2;
}
最后实际路程=sum-m 因为最后一次并未弹起
参考代码:
#include"iostream"
#include"cstdio"
using namespace std;
int main(){
int n;
double m,sum=0;
cin>>m>>n;
while(n--){
sum+=m/2*3;
m=m/2;
}
printf("%.2lf %.2lf\n",m,sum-m);
return 0;
}0.0分
14 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
#include<stdio.h> int main() { double M,N; scanf("%lf %lf",&M,&N); double sn=0; for(int i=0;i<N;i++){ sn=sn+M/2*3;//小球每次从下落到弹起一共的路程 M/=2; } /*由于计算的是第N次落地时共经过多少米, 所以要减掉第N次落地后弹起的距离*/ printf("%0.2lf %0.2lf",M,sn-M); return 0; }#include<stdio.h> int main() { int i; float sum=0; float M,N,G; scanf("%f%f",&M,&N); for(i=1;i<=N;i++) { sum+=M+M/2; M=M/2; G=M; } printf("%0.2f %0.2f",G,sum-M); return 0; }#include<stdio.h> int main() { int N; float height; scanf("%f %d", &height, &N); float m=0,t=0; for(int i=1;i<=N;i++){ m=height; height=height/2; t+=height+m; } printf("%.2f %.2f",height,t-height); return 0; }