У меня есть плата 4 x 4 (16 квадратов имеют значение 0). Я должен выбрать случайный квадрат в этой доске и создать случайное значение для этого квадрата.
Вот мой код
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <sys/time.h>
using namespace std;
void pickSquare(int [][4]);
void printSquare(int [][4]);
int main() {
int a[4][4];
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
a[i][j] = 0;
for (int i = 0; i < 10; i++)
{
cout << endl << i << endl;
pickSquare(a);
printSquare(a);
}
}
void pickSquare(int a[][4]) {
struct timeval t1;
gettimeofday(&t1, NULL);
srand(t1.tv_usec * t1.tv_sec);
int randValue = rand() % 10;
if (randValue == 0 || randValue == 1) randValue = 4;
else randValue = 2;
int count = 0;
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
if (a[i][j] == 0) ++count;
int random = rand() % count;
cout << endl << "count = " << count;
cout << endl << "random = " << random;
count = 0;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++)
if (a[i][j] == 0) {
if (count == random) {
a[i][j] = randValue;
cout << endl << " " << i << " " << j << endl;
break;
}
++count;
}
if (count == random) break;
}
}
void printSquare(int a[][4]) {
cout << endl;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++)
cout << a[i][j] << " ";
cout << endl;
}
}
Функция pickSquare(int [][4])
используется для выбора случайного квадрата и генерирования случайного значения. Функция printSquare(int [][4])
используется для печати платы 4 x 4.
Я думаю, что все в порядке, но когда я запускаю свою программу, иногда программа не выбирает ни одного квадрата. Поэтому после завершения функции плата остается прежней.
Может ли кто-нибудь объяснить, почему?
Я думаю, проблема в том, что
if (count == random) break;
Здесь вы можете вырваться за непроверенный счет, когда завершается внутренний цикл.
srand(NULL)
внутриmain()
, а не внутри вызываемой функции.