Выберите случайный квадрат и сгенерируйте случайное число

0

У меня есть плата 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.

Я думаю, что все в порядке, но когда я запускаю свою программу, иногда программа не выбирает ни одного квадрата. Поэтому после завершения функции плата остается прежней.

Может ли кто-нибудь объяснить, почему?

  • 1
    Возможно, вы хотите использовать srand(NULL) внутри main() , а не внутри вызываемой функции.
  • 0
    Я пытался, но проблема в том, что вы получите один и тот же ответ почти каждый раз
Показать ещё 7 комментариев
Теги:
random

1 ответ

1
Лучший ответ

Я думаю, проблема в том, что

if (count == random) break;

Здесь вы можете вырваться за непроверенный счет, когда завершается внутренний цикл.

  • 0
    Да, давай встретимся попробуем.
  • 0
    @Pea Nguyen: рассмотрим случай со случайным числом 1, и в первом ряду заняты первые 3 квадрата, а последний - пустым. Что будет, когда завершится внутренний цикл ....
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню