เป้าหมาย
สร้าง ( N
) ส่วนของเส้นสุ่มที่มีความยาวเหมือนกัน ( l
) ตรวจสอบว่าพวกเขาข้ามt
เส้นขนานเท่ากัน ( ) หรือไม่
การจำลอง
เรากำลังจำลองอะไร เข็มของ Buffon ทำให้ทรายเรียบในกล่องทรายของคุณวาดชุดของเส้นคู่ขนานที่เว้นระยะเท่ากัน (โทรหาระยะห่างระหว่างกันt
) นำแท่งไม้ที่มีความยาวตรงl
แล้วหยดN
ลงในกล่องทราย c
ให้จำนวนครั้งที่มันข้ามเส้นเป็น จากนั้นPi = (2 * l * n) / (t * c)
!
เราจำลองสิ่งนี้ได้อย่างไร
- รับอินพุต
N,t,l
- ด้วย
N, t, l
จำนวนเต็มบวกทั้งหมด - ทำตาม
N
เวลาต่อไปนี้:- สร้างพิกัดจำนวนเต็มสุ่มอย่างสม่ำเสมอ
x,y
- กับ
1 <= x, y <= 10^6
x,y
เป็นศูนย์กลางของส่วนของเส้นที่มีความยาวl
- สร้างจำนวนเต็มสุ่มอย่างสม่ำเสมอ
a
- กับ
1 <= a <= 180
- อนุญาต
P
เป็นจุดที่ส่วนของเส้นตรงข้ามแกน x - จากนั้น
a
เป็นมุม(x,y), P, (inf,0)
- สร้างพิกัดจำนวนเต็มสุ่มอย่างสม่ำเสมอ
- นับจำนวน,
c
ของส่วนของเส้นตรงที่ตัดข้ามx = i*t
จำนวนเต็มใด ๆi
- กลับ
(2 * l * N) / (t * c)
สเปค
- อินพุต
- ยืดหยุ่นรับอินพุตด้วยวิธีมาตรฐานใด ๆ (เช่นฟังก์ชันพารามิเตอร์ STDIN) และในรูปแบบมาตรฐานใด ๆ (เช่น String, Binary)
- เอาท์พุต
- ยืดหยุ่นให้ผลลัพธ์ในรูปแบบมาตรฐาน (เช่นผลตอบแทนการพิมพ์)
- พื้นที่สีขาวพื้นที่ต่อท้ายและพื้นที่สีขาวชั้นนำเป็นที่ยอมรับ
- ความแม่นยำโปรดระบุความแม่นยำอย่างน้อย 4 ตำแหน่ง (เช่น
3.1416
)
- เกณฑ์การให้คะแนน
- รหัสที่สั้นที่สุดชนะ!
กรณีทดสอบ
ผลลัพธ์ของคุณอาจไม่สอดคล้องกับสิ่งเหล่านี้เนื่องจากมีโอกาสสุ่ม N, t, l
แต่โดยเฉลี่ยแล้วคุณควรจะได้รับเกี่ยวกับความถูกต้องมากขนาดนี้สำหรับค่าที่กำหนด
Input (N,t,l) -> Output
----------- ------
10,10,5 -> ?.????
10,100,50 -> ?.????
1000,1000,600 -> 3.????
10000,1000,700 -> 3.1???
100000,1000,700 -> 3.14??
TL; DR
ความท้าทายเหล่านี้เป็นการจำลองอัลกอริธึมที่ต้องการเพียงแค่ธรรมชาติและสมองของคุณ หากคุณต้องการ Pi ในระหว่างการเปิดเผยซอมบี้วิธีการเหล่านี้จะไม่เปลืองกระสุน ! มีเก้าความท้าทายแล้วทั้งหมด
a
สามารถถูกสร้างขึ้นด้วยวิธีอื่นได้หรือไม่ถ้ามันสม่ำเสมอ? (คิดถึงฟองเกาส์ 2D)
t > l
ไหม? วิธีแก้ปัญหาด้านล่างสองข้อทำให้สมมติฐานนี้ซึ่งทำให้การตรวจสอบสี่แยกง่ายขึ้นเล็กน้อย