Test Message

e378: 撞來撞去

內容

現在地板上有兩個立方體和一面垂直於地板的牆壁

離牆壁較遠的立方體以等速撞上另一個立方體,使其撞上牆壁並以原路徑反彈

假設沒有摩擦力且所有碰撞均為完美彈性碰撞(也就是沒有能量散失)

且離牆壁較遠的立方體的質量是離牆壁較近的立方體的 10x

給你 x,請求出總共會碰撞幾次


輸入

每一行一個非負偶數 x(x<923)

0

輸出

總共會碰撞幾次

3


解題思路

假設較遠的立方體為 a ,較近的為 b,在沒有能量溢散,a 的質量正好為 10x 且 x 為偶數的的情況下 (也就是題意),立方 b 的總碰撞次數加起來剛好會是 Floor(π * 10x / 2) 次。

所以建好一個 pi 陣列,從第 0 項輸出至第 x/2 項即為答案。

具體請參考 3B1B (英語中字)佑來了 (中文)


完整程式碼

AC (2ms, 104KB)
#include <stdio.h>

int n;
char tmp, pi[1005] = "31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989";

int main()
{
while (scanf(" %d", &n) == 1)
{
n >>= 1;
tmp = pi[n + 1];
pi[n + 1] = '\0';
puts(pi);
pi[n + 1] = tmp;
}
return 0;
}