035-字节跳动题目-小球往返路程

image.png

image.png

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# -*- coding: utf-8 -*-
"""
Created on Tue Jul  2 17:46:55 2019

@author: zangz
"""

def weight(h,cnt):
    '''
    题目:一球从H米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第cnt次落地时,共经过多少米?第10次反弹多高?
    :param h:原始高度
    :param cnt:着地次数
    :return:sum 第cnt  着地经过的米
    思路:1、第n次反弹高度用循环所得
          2、第n次落地经过总路程
    '''

    hei = []  #存储的是第一次反弹后的高度
    sum = h  #第一次着地走过的路程就是初始落下来然后接触到地面
    for i in range(1,cnt): #循环计算的是触地的次数,第1次就是索引0已经在上面做了
        h = h/2
        hei.append(h) #反弹到落地算是一次接触地面
        if h ==0:
            break
    #计算cnt 着地经过路程
    if cnt == 1 :
        sum =h
    else:
        for j in range(len(hei)):  #将存储的高度进行遍历
            sum = sum + hei[j]*2 #每次都要加上的是弹起加落下的路程的两倍
#    print(sum)
    print('%.2f' % sum)  #格式化输出

if __name__=="__main__":
    m=int(input())  #求几组样例
    list1=[]  #存储样例数据
    for i in range(m):
        H,n=str(input()).split(" ")
        list1.append(int(H))
        list1.append(int(n))

    for i in range(0,2*m,2):
        weight(list1[i],list1[i+1])

执行

1
2
3
4
5
6
7
2  #输入的几组测试样例

10 2  #第一组 10m 2次

5 2  #第二组 5m 2次
20.00  #格式化输出
10.00