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

ความน่าจะเป็นที่จะถึงจุดด้วย 2 หรือ 3 ขั้นตอนในแต่ละครั้งใน C++


บุคคล "A" กำลังเดินจากตำแหน่งเริ่มต้น X =0 ภารกิจคือการหาความน่าจะเป็นที่จะไปถึง X =num อย่างแน่นอน ถ้าเขา/เธอสามารถรับ 2 หรือ 3 ขั้นตอน ความน่าจะเป็นสำหรับระยะที่ 2 เช่น P ความน่าจะเป็นสำหรับระยะที่ 3 คือ 1 - P

ป้อนข้อมูล

num = 5, p = 0.2

ผลผลิต

0.32

คำอธิบาย

There can be 2 ways to reach num, i.e, 5
2+3 with probability 0.2 * 0.8 = 0.16
3+2 with probability 0.8 * 0.2 = 0.16
So, total probability will be 0.16 + 0.16 = 0.32

ป้อนข้อมูล

num = 2, p = 0.1

ผลผลิต

0.1

แนวทางที่ใช้ด้านล่างมีดังต่อไปนี้ในการแก้ปัญหา

เราจะใช้วิธีการเขียนโปรแกรมแบบไดนามิกในการแก้ปัญหา

ในการแก้ปัญหาเราจะ -

  • ประกาศอาร์เรย์ความน่าจะเป็นที่มีขนาดเป็น num+1 และกำหนดค่าเป็น ตั้งค่า probab[0] =1 ตั้งค่าความน่าจะเป็น[1] =0, ตั้งค่าความน่าจะเป็น[2] =p ตั้งค่าความน่าจะเป็น[3] =1 – p

  • วนซ้ำ i จาก 0 ถึง num ในขณะที่เพิ่มค่าของมัน

  • สำหรับทุกๆ i ให้ตั้งค่า probab[i] =(p)*probab[i - 2] + (1 - p) * probab[i - 3]

  • คืนค่าความน่าจะเป็น[num]

  • พิมพ์ผล

อัลกอริทึม

Start
Step 1→ declare function to calculate probability of reaching a point with 2 or 3 steps
at a time
   float probab(int num, float p)
      Declare double probab[num + 1]
         `Set probab[0] = 1
         Set probab[1] = 0
         Set probab[2] = p
         Set probab[3] = 1 – p
         Loop For int i = 4 and i <= num and ++i
            Set probab[i] = (p)*probab[i - 2] + (1 - p) * probab[i - 3]
         End
         return probab[num]
Step 2→ In main()
   Declare int num = 2
   Declare float p = 0.1
   Call probab(num, p)
Stop

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
//function to calculate probability of reaching a point with 2 or 3 steps at a time
float probab(int num, float p){
   double probab[num + 1];
   probab[0] = 1;
   probab[1] = 0;
   probab[2] = p;
   probab[3] = 1 - p;
   for (int i = 4; i <= num; ++i)
      probab[i] = (p)*probab[i - 2] + (1 - p) * probab[i - 3];
   return probab[num];
}
int main(){
   int num = 2;
   float p = 0.1;
   cout<<"probability is : "<<probab(num, p);
   return 0;
}

ผลลัพธ์

หากรันโค้ดด้านบน มันจะสร้างผลลัพธ์ต่อไปนี้ -

probability is : 0.1