Мой код, если кому интересно. На кривость не ругацца!
Код:
bool TestStraight(int a, int b, int c)
{
#define min(z, x) (((z) < (x)) ? (z) : (x))
#define max(z, x) (((z) > (x)) ? (z) : (x))
int minV, maxV;
minV = min(min(a, b), c);
maxV = max(max(a, b), c);
if(maxV - minV < 5) return true;
if(a == 1) a = 14;
if(b == 1) b = 14;
if(c == 1) c = 14;
minV = min(min(a, b), c);
maxV = max(max(a, b), c);
if(maxV - minV < 5) return true;
return false;
}
//—————————————————————————————————————-
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i, j, k, n;
int board[5];
int value[5];
int suit[5];
int noDraws;
randomize();
noDraws = 0;
for(i = 0; i < Edit1->Text.ToInt(); i++)
{
// Генерация борда
board[0] = board[1] = board[2] = board[3] = board[4] = -1;
for(j = 0; j < 5; j++)
{
do {
n = random(52);
if(n == board[0] || n == board[1] || n == board[2] || n == board[3] || n == board[4])
{ continue; }
else
{ board[j] = n; break; }
} while(true);
}
// Проверка на флеш-дро
for(j = 0; j < 5; j++)
suit[j] = board[j] / 13;
n = 0;
for(j = 0; j < 5; j++)
if(suit[j] == 0) n++;
if(n >= 3) continue;
n = 0;
for(j = 0; j < 5; j++)
if(suit[j] == 1) n++;
if(n >= 3) continue;
n = 0;
for(j = 0; j < 5; j++)
if(suit[j] == 2) n++;
if(n >= 3) continue;
n = 0;
for(j = 0; j < 5; j++)
if(suit[j] == 3) n++;
if(n >= 3) continue;
// Проверка на пары
for(j = 0; j < 5; j++)
value[j] = board[j] % 13 + 1;
n = 0;
for(j = 0; j < 4; j++)
for(k = j + 1; k < 5; k++)
if(value[j] == value[k]) n++;
if(n) continue;
// Проверка на стрит-дро
// 11100
if(TestStraight(value[0], value[1], value[2])) continue;
// 11010
if(TestStraight(value[0], value[1], value[3])) continue;
// 11001
if(TestStraight(value[0], value[1], value[4])) continue;
// 10110
if(TestStraight(value[0], value[2], value[3])) continue;
// 10101
if(TestStraight(value[0], value[2], value[4])) continue;
// 10011
if(TestStraight(value[0], value[3], value[4])) continue;
// 01110
if(TestStraight(value[1], value[2], value[3])) continue;
// 01101
if(TestStraight(value[1], value[2], value[4])) continue;
// 01011
if(TestStraight(value[1], value[3], value[4])) continue;
// 00111
if(TestStraight(value[2], value[3], value[4])) continue;
// Дров нет!
noDraws++;
}
Label4->Caption = i;
Label5->Caption = noDraws;
Label6->Caption = 100 * float(noDraws) / float(i);
}