如何从我选择的三个整数中选择一个随机整数

时间:2019-03-17 18:18:09

标签: c random integer

我正在做一个琐事游戏,并且函数中的问题有一个随机问题,我试图选择一个0、1或2的随机整数。然后,我将根据函数的结果指向一个函数并运行该功能。然后,我想这样做,以便确保当我再次执行此操作时,可以确保不再得到该整数,以免出现相同的问题。

这就是我现在拥有的

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

但是它只是获取0到2之间的随机整数,然后不允许我选择三个直接整数,如果运行,则将其从此数组中取出。

2 个答案:

答案 0 :(得分:2)

有很多方法可供选择。其中之一是创建一个整数数组,在您的情况下,它的大小为三,其中的数字为0 ... 2。现在将这个数组改组。有很多算法可以做到这一点。一个示例为this
现在,只需遍历这个新创建的shuffle数组即可调用函数。在这种情况下,您的两个要求都将得到满足。 问题将以随机顺序出现,您不会再拨打相同的电话号码

此代码示例将帮助您入门:

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
    }
}

您需要编写交换功能

答案 1 :(得分:0)

对于少量项目,请使用无效值替换所选项目。
开关可用于处理随机项目。

#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;
}