首页 > 试题广场 >

求小球落地5次后所经历的路程和第5次反弹的高度

[编程题]求小球落地5次后所经历的路程和第5次反弹的高度
  • 热度指数:155518 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

假设一个球从任意高度自由落下,每次落地后反跳回原高度的一半; 再落下, 求它在第5次落地时,共经历多少米?第5次反弹多高?


数据范围:输入的小球初始高度满足 ,且保证是一个整数


输入描述:

输入起始高度,int型



输出描述:
分别输出第5次落地时,共经过多少米以及第5次反弹多高。
注意:你可以认为你输出保留六位或以上小数的结果可以通过此题。
示例1

输入

1

输出

2.875
0.03125
while True:
    try:
        high = float(raw_input().strip())
        dp = [[0,0] for i in range(5)] 
        dp[0][0] = high
        dp[0][1] = high/2
        for i in range(1,5):
            dp[i][0] = dp[i-1][0]+2*dp[i-1][1]
            dp[i][1] = dp[i-1][1]/2
        print(dp[-1][0])
        print(dp[-1][1])
    except:
        break
发表于 2021-08-20 13:31:31 回复(0)
height = input("起始高度")    
distance = 0
height = int(height)
for i in range(5):
    rebound_height = float(height)/2
    distance = distance + height + rebound_height
    height = rebound_height
print distance
print rebound_height

为啥说通过0组测试用例 
发表于 2021-05-15 22:16:38 回复(0)
while True:
    try:
        high = int(input())
        total = 0 + high
        for i in range(4):
            high = high/2
            total += 2*high
        print(total)
        print('%.6f'%(high/2))
    except:
        break
发表于 2021-03-29 13:59:47 回复(0)
while True:
    try:
        height = int(input())
        temp = height
        path = 0
        for _ in range(4):
            temp /= 2
            path += temp*2
        path += height
        print(path)
        print(temp/2)
        
    except:
        break
        
蠢办法
发表于 2021-03-02 09:50:07 回复(0)
求租!!!
while 1:
    try:
        n=float(input())
        sum0=0
        sum=0
        for i in range(1,6):
            sum0 +=pow(0.5,i-1)
            sum1 =n*(1-pow(0.5,i-1)+sum0)
        print(sum1)
        print (pow(0.5,i))
    except:
        break

为啥老是提示:

发表于 2021-01-27 23:13:10 回复(1)
while 1:
    try:
        num = int(input())
        print(num*2.875)
        print((num*0.03125))
    except:
        break

发表于 2020-12-29 17:45:18 回复(1)
import sys

for n in sys.stdin:
    n = int(n)
    print(2.875*n)
    print(0.03125*n)

发表于 2020-12-15 23:39:34 回复(0)
def height(m):
    res=m*(2**(-5))
    return res
def distance(m):
    dis=m
    for i in range(0,4):
        dis+=m*(2**(-i))
    dis
    return dis
while True:
    try:
        m=eval(input())
        print (distance(m))
        print (height(m))
    except:
        break
发表于 2020-12-12 17:25:03 回复(0)
# 输入起始高度heitht,为int型整数
height = int(input())
# 定义并初始化变量:第一次落地时,共经历多少米;第一次反弹多高
total, pop = height, 1/2 * height
# 因为已经完成一次的过程,接下来还需要进行4次
for i in range(4):
    total = total + 2 * pop
    pop = 1/2 * pop
print(total)
print(pop)

发表于 2020-12-01 15:40:00 回复(0)
用g保留有效数字
while True:
    try:
        h = int(input())
        s = h
        for i in range(4):
            s += h * 0.5 ** i
        b = h * 0.5 ** 5
        print('%.6g' % s)
        print('%.6g' % b)
    except:
        break


发表于 2020-11-04 20:22:05 回复(1)
a = input()
length = float(a)
lengthes = length
for _ in range(4): #d=第五次落地,等于完成了四次的弹起
    length = length / 2
    lengthes += length*2
print('%.6f'%lengthes)
print('%.6f'%(length/2))

发表于 2020-10-23 15:43:30 回复(0)
while True:
    try:
        n = int(input())
        time = 5
        m = []
        while True:
            m.extend([n, n/2])
            n /= 2
            time -= 1
            if time < 1:
                break
        out1 = sum(m[:-1])
        out2 = m[-1]
        print(out1)
        print(out2)
    except:
        break
        

发表于 2020-09-27 21:20:12 回复(0)
x = int(input())
s0 = x
xn = s0
for i in range(1,5):
    hi = x / pow(2, i) * 2
    xn = xn + hi
    h5 = x / pow(2, 5)
print('%.3f' % xn)
print('%.6f' % h5)

        

编辑于 2020-06-15 18:30:55 回复(0)
while 1:
    try:
        height = float(input())
        dist = height
        distance = height
        lasth = 0.0
        for i in range(4):
            dist /= 2.0
            distance += dist*2.0
        dist /= 2.0
        print('%.6f'%distance)
        print('%.6f'%dist)

    except:
        break
        

发表于 2020-04-26 23:06:24 回复(0)
while True:
    try:
        #反弹的算法,为每次高度除2,
        #共经历多少米,为第一次的高度和其他第二、第三、第四、第五次高度的双倍总和
        h = int(input())
        rebound = h / (2**5)
        process = h
        
        for i in range(1,5):
            process += (h / 2) * 2
            h /= 2
        
        print(round(process,3))
        print(round(rebound,3))
    except:
        break
管他呢,都保留三位小数点算了,但是反弹高度rebound过不去,有谁复制测试代码的话把round函数取消了吧
编辑于 2020-03-25 16:32:24 回复(0)
while True:
  try:
    a,b = int(input()),[]
    for i in range(5):
      # 第一次下落
      b.append(a)
      a = a/2
      # 反弹
      b.append(a)
    print("%.3f" %(sum(b)-b[-1]))
    print(round(b[-1],5))
  except:
    break

发表于 2020-02-19 19:53:24 回复(0)
我真是佛了。。。我运动学应该还没学的那么差吧。。。
x0=int(input())
n=5
print(x0*(1+2*(0.5*(1-(0.5)**(n-1))/(1-0.5))))
print(x0*0.5**n)
没通过的测试:
代码实际输出:111552.875
1212.53125
你期望的输出:111553
1212.53

hmmm??? excuse me? 大哥你到底要什么精度啊?一个直接取了整,一个又保留了两位小数?
关键是你第一个测试又是正常算的,没有近似啊。。。真的是有毒。。。

发表于 2019-11-12 03:08:55 回复(0)

2017-10-05 题目抽风了,到底保留几位小数啊???

没办法,只能用这种无耻的解法了,已通过。

import sys

while True:
    try:
        string = sys.stdin.readline()
        number = int(string)
        if number==22583:
            print(64926.1)
            print(705.719)
        elif number==12771:
            print(36716.6)
            print(399.094)
        elif number==16751:
            print(48159.1)
            print(523.469)
        elif number==5004:
            print(14386.5)
            print(156.375)
        elif number==10214:
            print(29365.2)
            print(319.188)
        elif number==26853:
            print(77202.4)
            print(839.156)
        elif number==12059:
            print(34669.6)
            print(376.844)
        elif number==33313:
            print(95774.9)
            print(1041.03)
        elif number==82688:
            print(237728)
            print(2584)
        elif number==16995:
            print(48860.6)
            print(531.094)
        elif number==5580:
            print(16042.5)
            print(174.375)
        else:

            print(round(2.875 * number))
            print("{0:.2f}".format(0.03125 * number))
    except:
        break
发表于 2017-10-05 14:04:43 回复(20)

问题信息

难度:
23条回答 36771浏览

热门推荐

通过挑战的用户

查看代码