فرض کنید که ۲۰ سکه روی میزی قرار دارد به این صورت که روی سکه ها به سمت بالاست. ابتدا ۲ تا از این سکه ها رو به صورت شانسی بر عکس می کنیم. بدیهیست که ۱۸ تا سکه رو و ۲ سکه پشت داریم. حالا ۵ سکه را از بین این ۲۰ سکه به صورت شانسی انتخاب می کنیم. تعداد سکه هایی که رو و پشت هستند تغییر می کند. تعداد سکه های مورد انتظار بعد از تعدادی پشت و رو کردن به صورت شانسی را به چه صورت می توان بدست آورد.
در این سوال تابع دو ورودی دارد. ۱- تعداد سکه ۲- آرایه ای از تعداد سکه هایی که در هر مرحله باید به صورت شانسی انتخاب شوند و برعکس شوند. تعداد سکه ها بین ۱ و ۱۰۰۰ و سایز آرایه حداکثر ۵۰ می باشد.
می خواهیم ۵ تا سکه از این ۲۰ سکه انتخاب کنیم. ۱۸/۲۰ احتمال دارد که از سکه های رو و ۲/۲۰ احتمال می رود که از سکه های پشت انتخاب کنیم و آنها را برعکس کنیم. سکه های رویی که انتخاب می کنیم چون به صورت پشت قرار میگیرند از تعداد سکه های رو کم می شود و تعداد سکه هایی که از سکه های پشت انتخاب می کنیم به سکه های رو اضافه می شود به عبارت دیگر:
HEAD = HEAD - HEAD * ( a[i] / N) + (N- HEAD ) * ( a[i] / N ) ;
نکاتی که توی این فرمول باید دقت کنید CAST به دابل می باشد.
کد کامل :
double expectedHeads(int N, vector <int> a) {
double k = N ni = N;;
double
for( int i = 0 ; i < a.size() ; i++ ) {
k = k - (k )* (a[i]/ni) + ((ni-k)) * (a[i]/ni) ;
}
return k;
}