2017年天梯賽大區賽題集 7-13 非常彈的球 (30 分)(物理)
阿新 • • 發佈:2021-02-11
技術標籤:2017年天梯賽大區賽題集物理學
剛上高一的森森為了學好物理,買了一個“非常彈”的球。雖然說是非常彈的球,其實也就是一般的彈力球而已。森森玩了一會兒彈力球后突然想到,假如他在地上用力彈球,球最遠能彈到多遠去呢?他不太會,你能幫他解決嗎?當然為了剛學習物理的森森,我們對環境做一些簡化:
- 假設森森是一個質點,以森森為原點設立座標軸,則森森位於(0, 0)點。
- 小球質量為w/100千克(kg),重力加速度為9.8米/秒平方(m/)。
- 森森在地上用力彈球的過程可簡化為球從(0, 0)點以某個森森選擇的角度ang(0<ang<π/2) 向第一象限丟擲,丟擲時假設動能為1000 焦耳(J)。
- 小球在空中僅受重力作用,球縱座標為0時可視作落地,落地時損失p%動能並反彈。
- 地面可視為剛體,忽略小球形狀、空氣阻力及摩擦阻力等。
森森為你準備的公式:
- 動能公式:E=m×/2
- 牛頓力學公式:F=m×a
- 重力:G=m×g
其中:
- E- 動能,單位為“焦耳”
- m- 質量,單位為“千克”
- v- 速度,單位為“米/秒”
- a- 加速度,單位為“米/秒平方”
- g- 重力加速度
輸入格式:
輸入在一行中給出兩個整數:1≤w≤1000和1≤p≤100,分別表示放大100倍的小球質量、以及損失動力的百分比p。
輸出格式:
在一行輸出最遠的投擲距離,保留3位小數。
輸入樣例:
100 90
輸出樣例:
226.757
題意:
給定小球的動能,質量,和損失的動力百分比p,並以某一角度向上丟擲小球,小球在碰撞的過程會損失p%的動能,問小球最長的水平距離是多少
思路:
我們可以先求出水平距離的表示式(在不計算動能損失的情況下)
聯立,,,,,得
又,故當時,長度取到最大值
最後就是簡單地模擬小球彈跳的過程了,每次碰撞動能W都會損失p%,隨後累加水平距離
注意最後的精度要求,保留三位小數,動能小於1e-8認為已經是零了,防止卡精度(第二個測試點)
並且由於上拋過程和下落的過程是對稱的,都有水平移動,所以最後的距離需要再乘上2
程式碼:
//7-13 非常彈的球 (30 分) #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int main() { double m , p; cin>>m>>p; m /= 100 , p /= 100; //化為正確的形式 double w = 1000 , len = 0; //初始話動能和總距離 while(w > 1e-8) //防止double卡精度 { len += w / (m * 9.8); //帶入距離公式 w *= (1 - p); //動能損失 p% } printf("%.3lf\n" , 2 * len); //上拋和下降是對稱的,距離需要 * 2 return 0; }