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 ]