一球从100米高度自由落下 每次落地返回弹回(算法题: 一球从100米高度自由落下,每次落地后反跳回原高度的一半)
导读:一.序言: 今天在逛C站的时候,突然发现一篇这样的文章《算法题: 一球从100米高度自由落下,每次落地后反跳回原高度的一半》。勾起了我的兴趣(就像小学生看见了加减法的题目,很兴奋,终于可以装13了)。...
一.序言:
今天在逛C站的时候,突然发现一篇这样的文章《算法题: 一球从100米高度自由落下,每次落地后反跳回原高度的一半》。勾起了我的兴趣(就像小学生看见了加减法的题目,很兴奋,终于可以装13了)。
二.题目:
一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?
三.思路:
1.首先我们来看一下这个球的运动轨迹: 2.解题思路:
我们可以清楚的看到:
a.一次反弹的高度,是原高度的一半:用高度除2循环或者递归所需次数,就能得出最终高度。
b1.经过的路程:球体原来的高度加上反弹的高度,就是一次路程,循环所需次数累加,就是总路程。
b2.经过的路程:除第一次和最后一次的高度都乘2,再加上第一次和最后一次的高度,就是最终路程。
b3.经过的路程:所有的高度都程2,再减去第一次的高度和最后一次的高度,就是最终路程。以上是没有认真审题时,没看到路程是第10次落地时,不加上反弹路程时的思路。
经过的路程,我比较倾向于b1方案,最符合实际运动轨迹。
四.代码:
1.用球体运动轨迹来计算结果:
//算法题: 一球从100米高度自由落下,每次落地后反跳回原高度的一半 //题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高? //最终反弹高度 总共运动路程 double height = 100,sum = 0; //球体运动 for (int i = 0; i < 10; i++) { //本次路程 double the = 0; //本次加下落路程 the += height; //累加下落路程 sum += height; //获取本次反弹高度 height /= 2; Console.WriteLine($"第{i + 1}次反跳,高度为:{height}"); //第10次落地,不用计算反弹高度 if (i < 9) { //本次路程累加反弹高度 the += height; //累加反弹路程 sum += height; } Console.WriteLine($"第{i + 1}次路程:{the}"); Console.WriteLine($"{i + 1}次反弹时,总路程:{sum}"); } Console.WriteLine($"答:第10次落地时,共经过{sum}米,10次反弹{height}米");2.用2倍中间路程之后,最后加起始高度计算结果:
double height = 100, sum = 0; for (int i = 0; i < 10; i++) { //反弹高度 height /= 2; if (i < 9) { sum += height * 2; } Console.WriteLine($"第{i + 1}次反跳,高度为:{height}"); Console.WriteLine($"第{i + 1}次反跳,总路程:{sum}"); } //总路程加上最开始的100米 sum += 100; Console.WriteLine($"答:第10次落地时,共经过{sum}米,10次反弹{height}米");CSDN别的博主些的文章,保留了3位小数
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!