فرض کنید که ۲۰ سکه روی میزی قرار دارد به این صورت که روی سکه ها به سمت بالاستابتدا ۲ تا از این سکه ها رو به صورت شانسی بر عکس می کنیمبدیهیست که ۱۸ تا سکه رو و ۲ سکه پشت داریمحالا ۵ سکه را از بین این ۲۰ سکه به صورت شانسی انتخاب می کنیمتعداد سکه هایی که رو و پشت هستند تغییر می کندتعداد سکه های مورد انتظار بعد از تعدادی پشت و رو کردن به صورت شانسی را به چه صورت می توان بدست آورد.

در این سوال  تابع دو ورودی دارد۱تعداد سکه  ۲آرایه ای از تعداد سکه هایی که در هر مرحله باید به صورت شانسی انتخاب شوند و برعکس شوندتعداد سکه ها بین ۱ و ۱۰۰۰ و سایز آرایه حداکثر ۵۰ می باشد.

می خواهیم ۵ تا سکه از این ۲۰ سکه انتخاب کنیم۱۸/۲۰ احتمال دارد که از سکه های رو و ۲/۲۰ احتمال می رود که از سکه های پشت انتخاب کنیم و آنها را برعکس کنیمسکه های رویی که انتخاب می کنیم چون به صورت پشت قرار میگیرند از تعداد سکه های رو کم می شود و تعداد سکه هایی که از سکه های پشت انتخاب می کنیم به سکه های رو اضافه می شود به عبارت دیگر:

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;

}