Я новичок в программировании, и мне пришлось работать над программой, которая имитировала бы 10 000 игр в кости. Я получил его для подсчета очков для дома и игрока просто отлично, пока я не добавил функцию «diceRoll», где игрок бросает снова и снова, пока он не совпадет с первым броском или 7 (победа дома). Теперь он дает явно не случайные результаты (например, казино выигрывает 0 раз из 10 000). Что я сделал не так?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
bool diceRoll (int a)
{
srand( (unsigned)time(NULL));
int n = 0;
int b = 0;
while(n < 1) {
b = rand() % 12;
if(b == a || b == 6) n++;
}
if(b == 6) return false;
else return true;
}
int main (void)
{
srand( (unsigned)time(NULL));
int a, n, house, player, point;
house = 0;
player = 0;
point = 0;
for(n = 0; n < 10000; n++) {
a = rand() % 12;
if(a == 1 || a == 2 || a == 11) {
house++;
}
else if(a == 6 || a == 10) {
player++;
}
else {
if(diceRoll(a) == true) player++;
else house++;
}
}
printf("The house has %i points.\n", house);
printf("The player has %i points.\n", player);
return 0;
}
rand()
- взвешивания по модулю. Лучше узнать сейчас, чем потом. - person WhozCraig   schedule 20.09.2013