B - 結果填空:炮臺實驗 計蒜客 - A2222(沒理解)

zhengsir8866發表於2020-10-12

轉載自:https://blog.csdn.net/qq_43328040/article/details/88636582?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.channel_param
蒜頭君在玩一個戰爭模擬遊戲,他有高度為 1,2,3,…,n 的炮臺各一個,他需要把這 n 個炮臺從左往右排成一行,並且炮口都朝向右邊。
在這個遊戲中,所有炮臺發射的炮彈會摧毀前方所有高度比自己低的炮臺。每當蒜頭君把 n 個炮臺排成一行後,可能會有一些炮臺被摧毀。舉個例子:當前有 5 個炮臺,從左到右高度分別為 2,1,3,5,4往右發射炮彈後,高度為 4 的炮臺被高度為 5 的摧毀,高度為 1 的炮臺被高度為 2 的炮臺摧毀,最後只會剩下 2,3,5 這三個炮臺。
現在蒜頭君想知道,如果隨機地擺放這 n 個炮臺,最後剩下炮臺個數的期望是多少?比如 n=2 時,有兩種擺放方式,高度序列分別為 1,2和 2,1前者最後剩下 2 個炮臺,後者最後剩下一個炮臺,因此期望為 (2+1)/2=1.5000
請你求出 n=2019n=2019 時剩下炮臺個數的期望,保留四位小數。
題解:
(1).對於期望的理解不夠深刻,大部分人算期望總是讓 (x1+x2+……+xn)/n,但是n = 2019,可能性很多,所以不妨考慮每一個數字存活的期望再相加。
這裡考慮期望值是每個可能的結果乘以概率得到的數字,那麼考慮最大的一個數字留下來的概率是1,那麼它的期望就是1*1(一個數字 * 留下來的期望);同理,第二大的數字留下來的概率是1/2(在最大數字左邊和右邊概率是一樣的);第三大的數字留下來的概率是1/3(最大數字和第二大數字之間有三個空,只有在兩個最左邊才可以留下來),以此類推,最終期望和為:
ans=1+1/2+1/3+…1/n。
程式碼:
#include
#include <bits/stdc++.h>
using namespace std;

int main()
{
double exp = 0;
for(int i = 1;i<=2019;i++)
{
exp+=1.0/i;
}
printf("%.4lf",exp);
return 0;
}
沒有理解為什麼期望值就是每個炮臺留下來的概率相加
!!!!!!!!!

相關文章