C++中步長為2或3時到達某點的機率
一個人“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,設定probab[1] = 0,設定probab[2] = p,設定probab[3] = 1 – p
迭代i從0到num,同時遞增其值
對於每個i,設定probab[i] = (p)*probab[i - 2] + (1 - p) * probab[i - 3]
返回probab[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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP