rand () производит числа выше заданного диапазона в рекурсивной функции - PullRequest
0 голосов
/ 20 марта 2019

Насколько я понимаю, это дает случайное число от 10 до смещения:

random = (rand() % 10) + offset;

смещение увеличивается на 1, но никогда не превышает 10, но когда я запускаю этот код, переменная random устанавливается на числа> 10.

рассматриваемый код:

#include "pch.h"
#include <cstdlib>
#include <Windows.h>
#include <iostream>
using namespace std;

void gen(int offset)
{
    int random;

    if (offset != 10)
    {
        random = (rand() % 10) + offset;
        cout << "random should be between: " << 10 << " and " << offset << endl;
        cout << "random: " << random << endl << endl;
        Sleep(500);
        gen(++offset);
    }
}

int main()
{
    srand(373);

    gen(1);
    cin.get();
}

и вывод:

random должен быть между: 10 и 1

random: 7

случайно должно быть между: 10 и 2

случайно: 11

случайно должно быть между: 10 и 3

случайно:3

случайно должно быть между: 10 и 4

случайно: 13

случайно должно быть между: 10 и 5

случайный: 10

случайный должен быть между: 10 и 6

случайный: 13

случайный должен быть между: 10 и 7

случайно: 16

случайно должно быть между: 10 и 8

случайно: 14

случайно должно быть между: 10 и 9

в случайном порядке: 18

Ответы [ 2 ]

1 голос
/ 20 марта 2019

(rand() % 10) возвращает значение в диапазоне [0, 9], поэтому (rand() % 10) + offset возвращает значение в диапазоне [смещение, смещение + 9].

Если вы хотите вернуть значение в диапазоне [смещение,10] вам потребуется (rand() % (11 - offset)) + offset для смещений меньше 11.

Также вам, вероятно, следует использовать std ::iform_int_distribution , чтобы получить случайное целое число в диапазоне.

0 голосов
/ 20 марта 2019

(rand() % 10) приводит к числу от 0 до 9, к которому вы затем добавляете offset В первый раз rand() % 10) привело к 6, к которому вы добавили 1. таким образом 7. Во второй раз, rand() % 10) привело к 9, к которому вы добавили 2, таким образом 11.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...