Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ค้นหาความน่าจะเป็นที่ผู้เล่นจะชนะเมื่อความน่าจะเป็นในการชนเป้าหมายเป็น C++


ในปัญหานี้ เราได้รับค่าสี่ค่า p, q, r, s งานของเราคือค้นหาความน่าจะเป็นที่ผู้เล่นจะชนะเมื่อมีความน่าจะเป็นที่จะโดนเป้าหมาย

ที่นี่เรามีผู้เล่นสองคนที่กำลังเล่นเกมยิงธนูอยู่ และความน่าจะเป็นของผู้เล่น 1 คนที่จะโจมตีเป้าหมายถูกกำหนดเป็น p/q . ความน่าจะเป็นที่ผู้เล่น 2 จะโจมตีเป้าหมายถูกกำหนดเป็น r/s เราต้องหาความน่าจะเป็นของผู้เล่นคนหนึ่งที่จะชนะเกม

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

อินพุต

p =3, q ​​=5, r =2, s =5

ผลลัพธ์

0.789

แนวทางการแก้ปัญหา

*วิธีนี้ต้องใช้ความรู้เรื่องความน่าจะเป็น

เนื่องจากไม่มีการจำกัดจำนวนครั้งที่ผู้เล่นสามารถได้รับโอกาสในการโจมตีเป้าหมายได้ ทั้งสองสามารถบรรลุเป้าหมายจำนวนครั้งใด ๆ ซึ่งทำให้การคำนวณสถานการณ์ที่ชนะนั้นขึ้นอยู่กับจำนวนการทดลองใช้

ดังนั้น

สมมติว่าความน่าจะเป็นที่ผู้เล่นคนหนึ่งจะโจมตีเป้าหมายคือ P1 =p/q นี่ทำให้ความน่าจะเป็นที่จะพลาด 1 - p/q

สมมติว่าความน่าจะเป็นของผู้เล่นสองคนที่โจมตีเป้าหมายคือ P2 =r/s ซึ่งทำให้ความน่าจะเป็นที่จะพลาด 1 - r/s

ตอนนี้ สำหรับการทดลองที่ไม่จำกัดจำนวนครั้ง ความน่าจะเป็นที่ผู้เล่น 1 ชนะสามารถเป็นได้

<ก่อน>000win(P1) + (แพ้(P1)*แพ้(P2)*ชนะ(P1)) +(แพ้(P1)*แพ้(P2)*แพ้(P1)*แพ้(P2)*ชนะ(P1) + ….

ซึ่งสามารถกำหนดได้เป็น

P1 + ((1 - P1)*(1 - P2)*(P1)) + ((1 - P1)*(1 - P2)*(1 - P1)*(1 - P2)*(P1)) …

นี่คือ GP ที่ไม่มีที่สิ้นสุดที่ไหน

A =P1R =[(1 - P1)*(1 - P2)]

ผลรวมจะเป็น

S =A/ (1- R) เนื่องจาก R น้อยกว่า 1

$$S=\left(\frac{\left(\frac{p}{p}\right)}{1-\left(1-\frac{p}{p}\right)*\left(1- \frac{p}{p}\right)}\right)$$

โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา

ตัวอย่าง

#include ใช้เนมสเปซ std;double calcWinningPropP1(double p, double q, double r, double s){ return (p / q) / (1 - ( (1 - (p/q))) * ( 1 - (r/s)) ) );}int main() { double p =3, q ​​=5, r =2, s =5; cout<<"ความน่าจะเป็นของผู้เล่น 1 คนที่ชนะคือ "< 

ผลลัพธ์

ความน่าจะเป็นของผู้เล่น 1 คนที่จะชนะคือ 0.789474