算落地弹起高度
这是我自己搞出来的算法。
题:球从某一高度落下(自定义);每次落地后弹起的高度是原来高度的一半,再落下。编程计算1,球第十次反弹多高?
2,在第十次落地时,共经过了多少米。
验证值:20,第十次弹起高度0.01953125
第十次总距离59.921875
————————————————————————
这道题,第一个好算,第二个麻烦。
我的算法是:
double n = Convert.ToDouble(Console.ReadLine());
int i = 1;
double sum = 0;
while (i < 11)
{
sum += (1.5 * n);
n /= 2.0;
i++;
}
Console.WriteLine("第十次弹起高度:"+n);
Console.WriteLine("第十次落地总距离为:"+(sum-n));
——————————————————————————————
该算法的原理是:
总高度n= 8000;
落下 弹起
1 8000 4000 n 0.5n 总共1.5n
2 4000 2000 n 0.5n 总共1.5n
3 2000 1000 n 0.5n 总共1.5n
4 1000 500 n 0.5n 总共1.5n
5 500 250 n 0.5n 总共1.5n
6 250 125 n 0.5n 总共1.5n
7 125 62.5 n 0.5n 总共1.5n
8 62.5 31.25 n 0.5n 总共1.5n
9 31.25 15.625 n 0.5n 总共1.5n
10 15.625 7.8125 n 0.5n 总共1.5n
一共有10个1.5n,所以只需要把这10个1.5n累加就好了,然后输出的时候减一下n,因为n这个时候经过了10次循环,他恰好就是第十次弹起的高度(而不是一开始的高度),把它减掉,就是第十次落地的总距离。