Как выбрать случайное целое число из трех выбранных мной целых - PullRequest
0 голосов
/ 17 марта 2019

Я делаю викторину и у меня есть вопросы по функциям, чтобы получить случайный вопрос. Я пытаюсь выбрать случайное целое число, равное 0, 1 или 2. В зависимости от того, что я получу, я затем укажу на функцию и выполню эта функция. Затем я хочу сделать так, чтобы, когда я делаю это снова, я мог убедиться, что не получу это целое число снова, чтобы не задавать тот же вопрос.

Это то, что у меня сейчас

  srand(time(NULL));
  int randomnumber;
  randomnumber = rand() % 3;

но он просто получает случайное целое число в диапазоне от 0 до 2, а затем не позволяет мне выбрать три прямых целых числа, а затем вывести их из этого массива, если выполняется.

Ответы [ 2 ]

2 голосов
/ 17 марта 2019

Есть много подходов. Одним из них будет создание массива целых чисел, в вашем случае он будет иметь размер три с числами 0 ... 2 в нем. Теперь перемешайте этот массив. Есть много алгоритмов, доступных для этого. Одним из примеров будет this .
Теперь просто переберите этот вновь созданный массив случайных чисел для вызова функций. В этом случае оба ваших требования будут учтены. вопросы будут в случайном порядке, и вы больше не будете звонить по тому же номеру .

Этот пример кода поможет вам начать:

void shuffle ( int arr[], int n ) {
    srand ( time(NULL) );
    //this will shuffle the array
    for (int i = n-1; i > 0; i--){
        // Pick a random index from 0 to i-1
        int j = rand() % (i);
        // Swap arr[i] with the element at random index
        swap(&arr[i], &arr[j]);
    }
}
int main(){
    int arr[] = {0, 1, 2};
    shuffle(arr, 3);
    int i;
    for(i = 0; i < 3; i++){
        // call the function with shuffled array
    }
}

Вам нужно написать функцию подкачки .

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

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

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

int main( void) {
    char items[] = "012";
    int each = 0;

    srand ( time ( NULL));

    while ( 1) {
        if ( ! strcmp ( "   ", items)) {
            printf ( "all items used\n");
            break;
        }

        do {//find an item that is not ' '
            each = rand ( ) % 3;
        } while ( items[each] == ' ');

        switch ( items[each]) {
            case '0':
                printf ( "using item 0\n");
                //do other things here as needed
                break;
            case '1':
                printf ( "using item 1\n");
                //do other things here as needed
                break;
            case '2':
                printf ( "using item 2\n");
                //do other things here as needed
                break;
        }

        items[each] = ' ';//set used item to ' '
    }
    return 0;
}
...