C++ Bc. 34 cpp
#include <iostream> #include <iomanip> #include <vector> #include <cstdlib> #include <ctime> using namespace std; // generator pseudonahodnych cisel <0, N) int random(int N) { return int( rand()/(RAND_MAX + 1.0)*N ); // int(vyraz) je explicitni konverze } // nahodna permutace std vektoru - zamichani karet void permutace(std::vector<int>& p) { for (int i=p.size()-1; i>0; i--) std::swap(p[i], p[random(i)]); } bool simulace(std::vector<int>& karty) { // cervene zelene kule zaludy // 0 8 16 24 sedma // 1 9 17 25 osma // 2 10 18 26 devitka // 3 11 19 27 desitka // 4 12 20 28 spodek // 5 13 21 29 filek // 6 14 22 30 kral // 7 15 23 31 eso while (true) { permutace(karty); int trumfy = 0; for (int i=0; i<=11; i++) if (karty[i] <= 7) trumfy++; if (trumfy != 4) continue; // prvni hrac nema prave 4 trumfy int trumfy2 = 0; // trumfy druheho hrace for (int i=12; i<=21; i++) if (karty[i] <= 7) trumfy2++; return trumfy2 == 0 || trumfy2 == 4; } } int main() { srand(time(0)); // inicializace generatoru rand() std::vector<int> karty(32); for (int i=0; i<32; i++) karty[i] = i; const int N = 100000; // pocet simulaci v jedne davce const double P = 0.086687; // teoreticka pravdepodobnost double tp = 0, tc = 0; // soucty jevu ve vsech davkach cout.setf(ios_base::fixed, ios_base::floatfield); cout.precision(4); for (int n=1; n<=10; n++) { double p = 0; for (int i=0; i<N; i++) if ( simulace(karty) ) p++; // pocet priznivych jevu v davce tp += p; tc += N; cout << setw(2) << n << " : " << P << " ~ " // teoreticka hodnota pravdepodobnosti << p/N << " " // odhad z n-te davky << tp/tc << endl; // odhad ze vsech davek } }
[ Zpět ]