C++ Bc. 39 cpp: Porovnání verzí
m založen zdr. 39 |
první verze C++ |
||
Řádek 1: | Řádek 1: | ||
<pre> | |||
#include <ctime> | |||
#include <cstdlib> | |||
inline double N01() | |||
{ | |||
return std::rand()/(RAND_MAX + 1.0); | |||
} | |||
bool neohrozujici_se_veze(int pocet_vezi) | |||
{ | |||
const int N = 8; | |||
int sachovnice[N][N] = {{0}}; | |||
for (int i=0; i<pocet_vezi; i++) | |||
{ | |||
int r, s; | |||
do | |||
{ | |||
r = int( N01()*N ); | |||
s = int( N01()*N ); | |||
} | |||
while (sachovnice[r][s] != 0); | |||
sachovnice[r][s] = 1; | |||
} | |||
for (int r=0; r<N; r++) | |||
{ | |||
int pocet = 0; | |||
for (int s=0; s<N; s++) | |||
{ | |||
pocet += sachovnice[r][s]; | |||
if (pocet > 1) return false; | |||
} | |||
} | |||
for (int s=0; s<N; s++) | |||
{ | |||
int pocet = 0; | |||
for (int r=0; r<N; r++) | |||
{ | |||
pocet += sachovnice[r][s]; | |||
if (pocet > 1) return false; | |||
} | |||
} | |||
return true;; | |||
} | |||
int main() | |||
{ | |||
std::srand(std::time(0)); | |||
std::cout.setf(std::ios_base::scientific, std::ios_base::floatfield); | |||
std::cout.precision(2); | |||
const long int N = 1000000; // pocet pokusu v jedne simulaci | |||
const long int veze[] = {8, 7, 6}; // pocet vezi v jednotlivych simulacich | |||
long int celkem[] = {0, 0, 0}; | |||
char* sep = " +-----------------------------------------------------------+"; | |||
std::cout << sep << "\n" << " |"; | |||
for (unsigned int k=0; k<sizeof(veze)/sizeof(int); k++) | |||
{ | |||
std::cout.width(10); | |||
std::cout << veze[k] << " |"; | |||
} | |||
std::cout << "\n" << sep << "\n"; | |||
for (int s=1; s<=10; s++) | |||
{ | |||
for (unsigned int k=0; k<sizeof(veze)/sizeof(int); k++) | |||
{ | |||
int priznive_jevy = 0; | |||
for (int i=0; i<N; i++) | |||
if (neohrozujici_se_veze(veze[k])) | |||
priznive_jevy++; | |||
celkem[k] += priznive_jevy; | |||
std::cout << " | " | |||
<< double(priznive_jevy)/N << " " | |||
<< double(celkem[k])/(N*s); | |||
} | |||
std::cout << " |\n"; | |||
} | |||
std::cout << sep << "\n"; | |||
} | |||
</pre> | |||
[ [[C++ Bc. 39 | Zpět]] ] | [ [[C++ Bc. 39 | Zpět]] ] | ||
[[Kategorie:Programování]] | [[Kategorie:Programování]] | ||
[[Kategorie:C++]] | [[Kategorie:C++]] |
Verze z 19. 1. 2008, 11:40
#include <ctime> #include <cstdlib> inline double N01() { return std::rand()/(RAND_MAX + 1.0); } bool neohrozujici_se_veze(int pocet_vezi) { const int N = 8; int sachovnice[N][N] = {{0}}; for (int i=0; i<pocet_vezi; i++) { int r, s; do { r = int( N01()*N ); s = int( N01()*N ); } while (sachovnice[r][s] != 0); sachovnice[r][s] = 1; } for (int r=0; r<N; r++) { int pocet = 0; for (int s=0; s<N; s++) { pocet += sachovnice[r][s]; if (pocet > 1) return false; } } for (int s=0; s<N; s++) { int pocet = 0; for (int r=0; r<N; r++) { pocet += sachovnice[r][s]; if (pocet > 1) return false; } } return true;; } int main() { std::srand(std::time(0)); std::cout.setf(std::ios_base::scientific, std::ios_base::floatfield); std::cout.precision(2); const long int N = 1000000; // pocet pokusu v jedne simulaci const long int veze[] = {8, 7, 6}; // pocet vezi v jednotlivych simulacich long int celkem[] = {0, 0, 0}; char* sep = " +-----------------------------------------------------------+"; std::cout << sep << "\n" << " |"; for (unsigned int k=0; k<sizeof(veze)/sizeof(int); k++) { std::cout.width(10); std::cout << veze[k] << " |"; } std::cout << "\n" << sep << "\n"; for (int s=1; s<=10; s++) { for (unsigned int k=0; k<sizeof(veze)/sizeof(int); k++) { int priznive_jevy = 0; for (int i=0; i<N; i++) if (neohrozujici_se_veze(veze[k])) priznive_jevy++; celkem[k] += priznive_jevy; std::cout << " | " << double(priznive_jevy)/N << " " << double(celkem[k])/(N*s); } std::cout << " |\n"; } std::cout << sep << "\n"; }
[ Zpět ]