บุคคล "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