算落地彈起高度
這是我自己搞出來(lái)的算法。
題:球從某一高度落下(自定義);每次落地后彈起的高度是原來(lái)高度的一半,再落下。編程計(jì)算1,球第十次反彈多高?
? ? ? ?2,在第十次落地時(shí),共經(jīng)過(guò)了多少米。
驗(yàn)證值:20,第十次彈起高度0.01953125
? ? ? ? ? ? ? ? ? ? ? 第十次總距離59.921875
————————————————————————
這道題,第一個(gè)好算,第二個(gè)麻煩。
我的算法是:
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個(gè)1.5n,所以只需要把這10個(gè)1.5n累加就好了,然后輸出的時(shí)候減一下n,因?yàn)閚這個(gè)時(shí)候經(jīng)過(guò)了10次循環(huán),他恰好就是第十次彈起的高度(而不是一開(kāi)始的高度),把它減掉,就是第十次落地的總距離。