Начните цикл со случайным значением, затем циклически изменяйте весь диапазон - PullRequest
0 голосов
/ 05 апреля 2019

Первый: Я генерирую случайное значение, например, в диапазоне от 0 до 30.

Второй: выберите 18 из диапазона.

Третье: Необходим цикл от 18 - 30 и от 17 - 0 в одном цикле.

Необязательно: диапазон можно изменить, это был пример. Главное, что мне нужно его зациклить в один цикл, начиная с сгенерированного числа в диапазоне. И не важно, в каком порядке я могу начать цикл. Дело в том, что я должен начать цикл со случайного числа из диапазона.

Я пробовал только с двумя циклами, вот так:

int low;
int high;
/* Generate a random value from low to high*/

for (i =  middleRand  ; i < high; i++)
{ 
       /* TODO*/
}
for ( i = middleRand - 1; i > low; i--)
{
      /* TODO*/
}

Но это не то, что мне действительно нужно, и я бы хотел использовать только один цикл .

Пример:

У меня есть две точки, которые создаются параллельно. Первая точка начинает свой цикл с 0 - 29, другая - 0 - 29. Но моя цель состоит в том, чтобы первая точка начиналась со случайного числа из диапазона (18), вторая начинается с 11. Но все две точки должны циклически изменить весь диапазон.

Ответы [ 3 ]

0 голосов
/ 05 апреля 2019

Вот простое решение:

int low = 0;                      // start of range, included
int high = 30;                    // end of range, included
int span = high - low + 1;        // number of values in the range
int start = low + rand() % span;  // random initial value
for (int i = 0; i < span; i++) {  // generate `span` values
    int value = low + (i + start - low) % span;
    // use value for this iteration
}
0 голосов
/ 07 апреля 2019

Если я понял, то, что вы пытаетесь сделать, это управлять несколькими управляющими переменными цикла одновременно. Для этого есть язык C:

int i, j, k;
for (i = 18, j = 17, k = 1; i < 30; i++, j--, k <<= 1) {
     /* bla bla */
}

В этом случае i будет 18, 19, ...., 29, j будет 17, 16, ..., 7, а k будет 1, 2, 4, 8, ....

Есть одна вещь, которую вы не можете сделать с этим подходом ... это иметь разные способы завершить цикл, в зависимости от различных управляющих переменных. В вашем случае вы говорите, что первая переменная идет от 18 до 30, то есть 12 проходит через цикл, а вторая - от 17 до 0, то есть 18 проходит через цикл, вы будете нужно решить, когда остановиться, потому что теперь есть только цикл .

0 голосов
/ 05 апреля 2019

Ваш вопрос не совсем понятен. Но я могу сказать, что если я понимаю ваш вопрос, то вы можете сделать:

int low;
int high;
int random_val = rand() % (high -low) + low;

for (int i = 0; i < high; i++) {
    if (i > random_val) {
         // low
    } else {
         // high
    }
}

Вы можете заменить // низкий на код для низкого цикла и // высокий для высокого цикла

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